Merge branch 'main' into switchNativeToolchainToLink
diff --git a/pkgs/native_assets_builder/test_data/add_asset_link/hook/build.dart b/pkgs/native_assets_builder/test_data/add_asset_link/hook/build.dart
deleted file mode 100644
index 74908a3..0000000
--- a/pkgs/native_assets_builder/test_data/add_asset_link/hook/build.dart
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) 2024, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:logging/logging.dart';
-import 'package:native_assets_cli/native_assets_cli.dart';
-import 'package:native_toolchain_c/native_toolchain_c.dart';
-
-void main(List<String> arguments) async {
-  await build(arguments, (config, output) async {
-    final logger = Logger('')
-      ..level = Level.ALL
-      ..onRecord.listen((record) {
-        print('${record.level.name}: ${record.time}: ${record.message}');
-      });
-    await CBuilder.library(
-      name: 'add',
-      assetName: 'dylib_add_build',
-      sources: [
-        'src/native_add.c',
-      ],
-      dartBuildFiles: ['hook/build.dart'],
-      linkModePreference: LinkModePreference.dynamic,
-    ).run(
-      buildConfig: config,
-      buildOutput: output,
-      logger: logger,
-      linkInPackage: 'add_asset_link',
-    );
-  });
-}
diff --git a/pkgs/native_assets_builder/test_data/add_asset_link/hook/link.dart b/pkgs/native_assets_builder/test_data/add_asset_link/hook/link.dart
index 5cea3b1..2d4d235 100644
--- a/pkgs/native_assets_builder/test_data/add_asset_link/hook/link.dart
+++ b/pkgs/native_assets_builder/test_data/add_asset_link/hook/link.dart
@@ -2,22 +2,30 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:logging/logging.dart';
 import 'package:native_assets_cli/native_assets_cli.dart';
+import 'package:native_toolchain_c/native_toolchain_c.dart';
 
 void main(List<String> arguments) async {
   await link(arguments, (config, output) async {
-    final builtDylib = config.assets.first as NativeCodeAsset;
-    output
-      ..addAsset(
-        NativeCodeAsset(
-          package: 'add_asset_link',
-          name: 'dylib_add_link',
-          linkMode: builtDylib.linkMode,
-          os: builtDylib.os,
-          architecture: builtDylib.architecture,
-          file: builtDylib.file,
-        ),
-      )
-      ..addDependency(config.packageRoot.resolve('hook/link.dart'));
+    final logger = Logger('')
+      ..level = Level.ALL
+      ..onRecord.listen((record) {
+        print('${record.level.name}: ${record.time}: ${record.message}');
+      });
+    final (assets, dependencies) = await CBuilder.library(
+      name: 'add',
+      assetName: 'dylib_add_build',
+      sources: [
+        'src/native_add.c',
+      ],
+      dartBuildFiles: ['hook/link.dart'],
+      linkModePreference: LinkModePreference.dynamic,
+    ).run(
+      hookConfig: config,
+      logger: logger,
+    );
+    output.addAssets(assets);
+    output.addDependencies(dependencies);
   });
 }
diff --git a/pkgs/native_assets_builder/test_data/drop_dylib_link/hook/build.dart b/pkgs/native_assets_builder/test_data/drop_dylib_link/hook/build.dart
index b7e430c..dfe9d84 100644
--- a/pkgs/native_assets_builder/test_data/drop_dylib_link/hook/build.dart
+++ b/pkgs/native_assets_builder/test_data/drop_dylib_link/hook/build.dart
@@ -15,7 +15,7 @@
       ..onRecord.listen((record) {
         print('${record.level.name}: ${record.time}: ${record.message}');
       });
-    await CBuilder.library(
+    final (assets, dependencies) = await CBuilder.library(
       name: 'add',
       assetName: 'dylib_add',
       sources: [
@@ -24,13 +24,11 @@
       dartBuildFiles: ['hook/build.dart'],
       linkModePreference: LinkModePreference.dynamic,
     ).run(
-      buildConfig: config,
-      buildOutput: output,
+      hookConfig: config,
       logger: logger,
-      linkInPackage: packageName,
     );
 
-    await CBuilder.library(
+    final (assets2, dependencies2) = await CBuilder.library(
       name: 'multiply',
       assetName: 'dylib_multiply',
       sources: [
@@ -39,10 +37,11 @@
       dartBuildFiles: ['hook/build.dart'],
       linkModePreference: LinkModePreference.dynamic,
     ).run(
-      buildConfig: config,
-      buildOutput: output,
+      hookConfig: config,
       logger: logger,
-      linkInPackage: packageName,
     );
+
+    output.addAssets([...assets, ...assets2], linkInPackage: packageName);
+    output.addDependencies([...dependencies, ...dependencies2]);
   });
 }
diff --git a/pkgs/native_assets_builder/test_data/native_add/hook/build.dart b/pkgs/native_assets_builder/test_data/native_add/hook/build.dart
index ff2b8b5..f9f9211 100644
--- a/pkgs/native_assets_builder/test_data/native_add/hook/build.dart
+++ b/pkgs/native_assets_builder/test_data/native_add/hook/build.dart
@@ -18,14 +18,15 @@
       ],
       dartBuildFiles: ['hook/build.dart'],
     );
-    await cbuilder.run(
-      buildConfig: config,
-      buildOutput: output,
+    final (assets, dependencies) = await cbuilder.run(
+      hookConfig: config,
       logger: Logger('')
         ..level = Level.ALL
         ..onRecord.listen((record) {
           print('${record.level.name}: ${record.time}: ${record.message}');
         }),
     );
+    output.addAssets(assets);
+    output.addDependencies(dependencies);
   });
 }
diff --git a/pkgs/native_assets_builder/test_data/native_add_add_source/hook/build.dart b/pkgs/native_assets_builder/test_data/native_add_add_source/hook/build.dart
index f42cd9d..98c9eae 100644
--- a/pkgs/native_assets_builder/test_data/native_add_add_source/hook/build.dart
+++ b/pkgs/native_assets_builder/test_data/native_add_add_source/hook/build.dart
@@ -19,14 +19,15 @@
       ],
       dartBuildFiles: ['hook/build.dart'],
     );
-    await cbuilder.run(
-      buildConfig: config,
-      buildOutput: output,
+    final (assets, dependencies) = await cbuilder.run(
+      hookConfig: config,
       logger: Logger('')
         ..level = Level.ALL
         ..onRecord.listen((record) {
           print('${record.level.name}: ${record.time}: ${record.message}');
         }),
     );
+    output.addAssets(assets);
+    output.addDependencies(dependencies);
   });
 }
diff --git a/pkgs/native_assets_builder/test_data/native_subtract/hook/build.dart b/pkgs/native_assets_builder/test_data/native_subtract/hook/build.dart
index 7e2a437..0ae255a 100644
--- a/pkgs/native_assets_builder/test_data/native_subtract/hook/build.dart
+++ b/pkgs/native_assets_builder/test_data/native_subtract/hook/build.dart
@@ -18,14 +18,15 @@
       ],
       dartBuildFiles: ['hook/build.dart'],
     );
-    await cbuilder.run(
-      buildConfig: config,
-      buildOutput: output,
+    final (assets, dependencies) = await cbuilder.run(
+      hookConfig: config,
       logger: Logger('')
         ..level = Level.ALL
         ..onRecord.listen((record) {
           print('${record.level.name}: ${record.time}: ${record.message}');
         }),
     );
+    output.addAssets(assets);
+    output.addDependencies(dependencies);
   });
 }
diff --git a/pkgs/native_assets_cli/example/build/native_add_library/hook/build.dart b/pkgs/native_assets_cli/example/build/native_add_library/hook/build.dart
index d40ba5e..d9759cc 100644
--- a/pkgs/native_assets_cli/example/build/native_add_library/hook/build.dart
+++ b/pkgs/native_assets_cli/example/build/native_add_library/hook/build.dart
@@ -17,12 +17,13 @@
       ],
       dartBuildFiles: ['hook/build.dart'],
     );
-    await cbuilder.run(
-      buildConfig: config,
-      buildOutput: output,
+    final (assets, dependencies) = await cbuilder.run(
+      hookConfig: config,
       logger: Logger('')
         ..level = Level.ALL
         ..onRecord.listen((record) => print(record.message)),
     );
+    output.addAssets(assets);
+    output.addDependencies(dependencies);
   });
 }
diff --git a/pkgs/native_assets_cli/example/build/use_dart_api/hook/build.dart b/pkgs/native_assets_cli/example/build/use_dart_api/hook/build.dart
index fb1a975..7cb919a 100644
--- a/pkgs/native_assets_cli/example/build/use_dart_api/hook/build.dart
+++ b/pkgs/native_assets_cli/example/build/use_dart_api/hook/build.dart
@@ -19,14 +19,15 @@
       ],
       dartBuildFiles: ['hook/build.dart'],
     );
-    await cbuilder.run(
-      buildConfig: config,
-      buildOutput: output,
+    final (assets, dependencies) = await cbuilder.run(
+      hookConfig: config,
       logger: Logger('')
         ..level = Level.ALL
         ..onRecord.listen((record) {
           print('${record.level.name}: ${record.time}: ${record.message}');
         }),
     );
+    output.addAssets(assets);
+    output.addDependencies(dependencies);
   });
 }
diff --git a/pkgs/native_assets_cli/lib/src/api/build.dart b/pkgs/native_assets_cli/lib/src/api/build.dart
index 7b173d4..31b3e21 100644
--- a/pkgs/native_assets_cli/lib/src/api/build.dart
+++ b/pkgs/native_assets_cli/lib/src/api/build.dart
@@ -28,13 +28,16 @@
 ///       ],
 ///       dartBuildFiles: ['hook/build.dart'],
 ///     );
-///     await cbuilder.run(
-///       buildConfig: config,
-///       buildOutput: output,
+///     final (assets, dependencies) = await cbuilder.run(
+///       hookConfig: config,
 ///       logger: Logger('')
 ///         ..level = Level.ALL
-///         ..onRecord.listen((record) => print(record.message)),
+///         ..onRecord.listen((record) {
+///           print('${record.level.name}: ${record.time}: ${record.message}');
+///         }),
 ///     );
+///     output.addAssets(assets);
+///     output.addDependencies(dependencies);
 ///   });
 /// }
 /// ```
diff --git a/pkgs/native_toolchain_c/lib/src/cbuilder/cbuilder.dart b/pkgs/native_toolchain_c/lib/src/cbuilder/cbuilder.dart
index 5bffb92..e47ac0f 100644
--- a/pkgs/native_toolchain_c/lib/src/cbuilder/cbuilder.dart
+++ b/pkgs/native_toolchain_c/lib/src/cbuilder/cbuilder.dart
@@ -11,9 +11,8 @@
 import 'run_cbuilder.dart';
 
 abstract class Builder {
-  Future<void> run({
-    required BuildConfig buildConfig,
-    required BuildOutput buildOutput,
+  Future<(List<Asset> assets, Set<Uri> dependencies)> run({
+    required HookConfig hookConfig,
     required Logger? logger,
   });
 }
@@ -199,21 +198,18 @@
   ///
   /// Completes with an error if the build fails.
   @override
-  Future<void> run({
-    required BuildConfig buildConfig,
-    required BuildOutput buildOutput,
+  Future<(List<Asset> assets, Set<Uri> dependencies)> run({
+    required HookConfig hookConfig,
     required Logger? logger,
-    String? linkInPackage,
   }) async {
-    final outDir = buildConfig.outputDirectory;
-    final packageRoot = buildConfig.packageRoot;
+    final outDir = hookConfig.outputDirectory;
+    final packageRoot = hookConfig.packageRoot;
     await Directory.fromUri(outDir).create(recursive: true);
     final linkMode =
-        _linkMode(linkModePreference ?? buildConfig.linkModePreference);
+        _linkMode(linkModePreference ?? hookConfig.linkModePreference);
     final libUri =
-        outDir.resolve(buildConfig.targetOS.libraryFileName(name, linkMode));
-    final exeUri =
-        outDir.resolve(buildConfig.targetOS.executableFileName(name));
+        outDir.resolve(hookConfig.targetOS.libraryFileName(name, linkMode));
+    final exeUri = outDir.resolve(hookConfig.targetOS.executableFileName(name));
     final sources = [
       for (final source in this.sources)
         packageRoot.resolveUri(Uri.file(source)),
@@ -225,9 +221,9 @@
     final dartBuildFiles = [
       for (final source in this.dartBuildFiles) packageRoot.resolve(source),
     ];
-    if (!buildConfig.dryRun) {
+    if (!hookConfig.dryRun) {
       final task = RunCBuilder(
-        buildConfig: buildConfig,
+        hookConfig: hookConfig,
         logger: logger,
         sources: sources,
         includes: includes,
@@ -244,8 +240,8 @@
         flags: flags,
         defines: {
           ...defines,
-          if (buildModeDefine) buildConfig.buildMode.name.toUpperCase(): null,
-          if (ndebugDefine && buildConfig.buildMode != BuildMode.debug)
+          if (buildModeDefine) hookConfig.buildMode.name.toUpperCase(): null,
+          if (ndebugDefine && hookConfig.buildMode != BuildMode.debug)
             'NDEBUG': null,
         },
         pic: pic,
@@ -256,23 +252,24 @@
       await task.run();
     }
 
+    List<NativeCodeAsset> assets;
     if (assetName != null) {
-      buildOutput.addAssets(
-        [
-          NativeCodeAsset(
-            package: buildConfig.packageName,
-            name: assetName!,
-            file: libUri,
-            linkMode: linkMode,
-            os: buildConfig.targetOS,
-            architecture:
-                buildConfig.dryRun ? null : buildConfig.targetArchitecture,
-          )
-        ],
-        linkInPackage: linkInPackage,
-      );
+      assets = [
+        NativeCodeAsset(
+          package: hookConfig.packageName,
+          name: assetName!,
+          file: libUri,
+          linkMode: linkMode,
+          os: hookConfig.targetOS,
+          architecture:
+              hookConfig.dryRun ? null : hookConfig.targetArchitecture,
+        )
+      ];
+    } else {
+      assets = [];
     }
-    if (!buildConfig.dryRun) {
+    Set<Uri> dependencies;
+    if (!hookConfig.dryRun) {
       final includeFiles = await Stream.fromIterable(includes)
           .asyncExpand(
             (include) => Directory(include.toFilePath())
@@ -282,13 +279,16 @@
           )
           .toList();
 
-      buildOutput.addDependencies({
+      dependencies = {
         // Note: We use a Set here to deduplicate the dependencies.
         ...sources,
         ...includeFiles,
         ...dartBuildFiles,
-      });
+      };
+    } else {
+      dependencies = {};
     }
+    return (assets, dependencies);
   }
 }
 
diff --git a/pkgs/native_toolchain_c/lib/src/cbuilder/compiler_resolver.dart b/pkgs/native_toolchain_c/lib/src/cbuilder/compiler_resolver.dart
index cdc8ee0..3bca1e5 100644
--- a/pkgs/native_toolchain_c/lib/src/cbuilder/compiler_resolver.dart
+++ b/pkgs/native_toolchain_c/lib/src/cbuilder/compiler_resolver.dart
@@ -20,13 +20,13 @@
 // TODO(dacoharkes): This should support alternatives.
 // For example use Clang or MSVC on Windows.
 class CompilerResolver {
-  final BuildConfig buildConfig;
+  final HookConfig hookConfig;
   final Logger? logger;
   final OS hostOS;
   final Architecture hostArchitecture;
 
   CompilerResolver({
-    required this.buildConfig,
+    required this.hookConfig,
     required this.logger,
     OS? hostOS, // Only visible for testing.
     Architecture? hostArchitecture, // Only visible for testing.
@@ -47,8 +47,8 @@
       return result;
     }
 
-    final targetOS = buildConfig.targetOS;
-    final targetArchitecture = buildConfig.targetArchitecture;
+    final targetOS = hookConfig.targetOS;
+    final targetArchitecture = hookConfig.targetArchitecture;
     final errorMessage =
         "No tools configured on host '${hostOS}_$hostArchitecture' with target "
         "'${targetOS}_$targetArchitecture'.";
@@ -58,8 +58,8 @@
 
   /// Select the right compiler for cross compiling to the specified target.
   Tool? _selectCompiler() {
-    final targetOS = buildConfig.targetOS;
-    final targetArch = buildConfig.targetArchitecture;
+    final targetOS = hookConfig.targetOS;
+    final targetArch = hookConfig.targetArchitecture;
 
     // TODO(dacoharkes): Support falling back on other tools.
     if (targetArch == hostArchitecture &&
@@ -97,7 +97,7 @@
   }
 
   Future<ToolInstance?> _tryLoadCompilerFromConfig() async {
-    final configCcUri = buildConfig.cCompiler.compiler;
+    final configCcUri = hookConfig.cCompiler.compiler;
     if (configCcUri != null) {
       assert(await File.fromUri(configCcUri).exists());
       logger?.finer('Using compiler ${configCcUri.toFilePath()} '
@@ -131,8 +131,8 @@
       return result;
     }
 
-    final targetOS = buildConfig.targetOS;
-    final targetArchitecture = buildConfig.targetArchitecture;
+    final targetOS = hookConfig.targetOS;
+    final targetArchitecture = hookConfig.targetArchitecture;
     final errorMessage =
         "No tools configured on host '${hostOS}_$hostArchitecture' with target "
         "'${targetOS}_$targetArchitecture'.";
@@ -142,8 +142,8 @@
 
   /// Select the right archiver for cross compiling to the specified target.
   Tool? _selectArchiver() {
-    final targetOS = buildConfig.targetOS;
-    final targetArchitecture = buildConfig.targetArchitecture;
+    final targetOS = hookConfig.targetOS;
+    final targetArchitecture = hookConfig.targetArchitecture;
 
     // TODO(dacoharkes): Support falling back on other tools.
     if (targetArchitecture == hostArchitecture &&
@@ -182,7 +182,7 @@
   }
 
   Future<ToolInstance?> _tryLoadArchiverFromConfig() async {
-    final configArUri = buildConfig.cCompiler.archiver;
+    final configArUri = hookConfig.cCompiler.archiver;
     if (configArUri != null) {
       assert(await File.fromUri(configArUri).exists());
       logger?.finer('Using archiver ${configArUri.toFilePath()} '
@@ -195,7 +195,7 @@
   }
 
   Future<Uri?> toolchainEnvironmentScript(ToolInstance compiler) async {
-    final fromConfig = buildConfig.cCompiler.envScript;
+    final fromConfig = hookConfig.cCompiler.envScript;
     if (fromConfig != null) {
       logger?.fine('Using envScript from config: $fromConfig');
       return fromConfig;
@@ -209,7 +209,7 @@
   }
 
   List<String>? toolchainEnvironmentScriptArguments() {
-    final fromConfig = buildConfig.cCompiler.envScriptArgs;
+    final fromConfig = hookConfig.cCompiler.envScriptArgs;
     if (fromConfig != null) {
       logger?.fine('Using envScriptArgs from config: $fromConfig');
       return fromConfig;
diff --git a/pkgs/native_toolchain_c/lib/src/cbuilder/run_cbuilder.dart b/pkgs/native_toolchain_c/lib/src/cbuilder/run_cbuilder.dart
index 3ff4560..845fc4d 100644
--- a/pkgs/native_toolchain_c/lib/src/cbuilder/run_cbuilder.dart
+++ b/pkgs/native_toolchain_c/lib/src/cbuilder/run_cbuilder.dart
@@ -19,7 +19,7 @@
 import 'compiler_resolver.dart';
 
 class RunCBuilder {
-  final BuildConfig buildConfig;
+  final HookConfig hookConfig;
   final Logger? logger;
   final List<Uri> sources;
   final List<Uri> includes;
@@ -43,7 +43,7 @@
   final String? cppLinkStdLib;
 
   RunCBuilder({
-    required this.buildConfig,
+    required this.hookConfig,
     this.logger,
     this.sources = const [],
     this.includes = const [],
@@ -57,12 +57,12 @@
     this.std,
     this.language = Language.c,
     this.cppLinkStdLib,
-  })  : outDir = buildConfig.outputDirectory,
+  })  : outDir = hookConfig.outputDirectory,
         assert([executable, dynamicLibrary, staticLibrary]
                 .whereType<Uri>()
                 .length ==
             1) {
-    if (buildConfig.targetOS == OS.windows && cppLinkStdLib != null) {
+    if (hookConfig.targetOS == OS.windows && cppLinkStdLib != null) {
       throw ArgumentError.value(
         cppLinkStdLib,
         'cppLinkStdLib',
@@ -72,7 +72,7 @@
   }
 
   late final _resolver =
-      CompilerResolver(buildConfig: buildConfig, logger: logger);
+      CompilerResolver(hookConfig: hookConfig, logger: logger);
 
   Future<ToolInstance> compiler() async => await _resolver.resolveCompiler();
 
@@ -122,8 +122,8 @@
     }
 
     final IOSSdk? targetIosSdk;
-    if (buildConfig.targetOS == OS.iOS) {
-      targetIosSdk = buildConfig.targetIOSSdk;
+    if (hookConfig.targetOS == OS.iOS) {
+      targetIosSdk = hookConfig.targetIOSSdk;
     } else {
       targetIosSdk = null;
     }
@@ -132,15 +132,15 @@
     // invoking clang. Mimic that behavior here.
     // See https://github.com/dart-lang/native/issues/171.
     final int? targetAndroidNdkApi;
-    if (buildConfig.targetOS == OS.android) {
+    if (hookConfig.targetOS == OS.android) {
       final minimumApi =
-          buildConfig.targetArchitecture == Architecture.riscv64 ? 35 : 21;
-      targetAndroidNdkApi = max(buildConfig.targetAndroidNdkApi!, minimumApi);
+          hookConfig.targetArchitecture == Architecture.riscv64 ? 35 : 21;
+      targetAndroidNdkApi = max(hookConfig.targetAndroidNdkApi!, minimumApi);
     } else {
       targetAndroidNdkApi = null;
     }
 
-    final architecture = buildConfig.targetArchitecture;
+    final architecture = hookConfig.targetArchitecture;
     final sourceFiles = sources.map((e) => e.toFilePath()).toList();
     final objectFiles = <Uri>[];
     if (staticLibrary != null) {
@@ -190,21 +190,21 @@
     await runProcess(
       executable: compiler.uri,
       arguments: [
-        if (buildConfig.targetOS == OS.android) ...[
+        if (hookConfig.targetOS == OS.android) ...[
           '--target='
               '${androidNdkClangTargetFlags[architecture]!}'
               '${targetAndroidNdkApi!}',
           '--sysroot=${androidSysroot(compiler).toFilePath()}',
         ],
-        if (buildConfig.targetOS == OS.macOS)
+        if (hookConfig.targetOS == OS.macOS)
           '--target=${appleClangMacosTargetFlags[architecture]!}',
-        if (buildConfig.targetOS == OS.iOS)
+        if (hookConfig.targetOS == OS.iOS)
           '--target=${appleClangIosTargetFlags[architecture]![targetIosSdk]!}',
-        if (buildConfig.targetOS == OS.iOS) ...[
+        if (hookConfig.targetOS == OS.iOS) ...[
           '-isysroot',
           (await iosSdk(targetIosSdk!, logger: logger)).toFilePath(),
         ],
-        if (buildConfig.targetOS == OS.macOS) ...[
+        if (hookConfig.targetOS == OS.macOS) ...[
           '-isysroot',
           (await macosSdk(logger: logger)).toFilePath(),
         ],
@@ -239,7 +239,7 @@
           '-x',
           'c++',
           '-l',
-          cppLinkStdLib ?? defaultCppLinkStdLib[buildConfig.targetOS]!
+          cppLinkStdLib ?? defaultCppLinkStdLib[hookConfig.targetOS]!
         ],
         ...flags,
         for (final MapEntry(key: name, :value) in defines.entries)
diff --git a/pkgs/native_toolchain_c/test/cbuilder/cbuilder_build_failure_test.dart b/pkgs/native_toolchain_c/test/cbuilder/cbuilder_build_failure_test.dart
index ae80750..166099a 100644
--- a/pkgs/native_toolchain_c/test/cbuilder/cbuilder_build_failure_test.dart
+++ b/pkgs/native_toolchain_c/test/cbuilder/cbuilder_build_failure_test.dart
@@ -43,8 +43,6 @@
         envScriptArgs: envScriptArgs,
       ),
     );
-    final buildOutput = BuildOutput();
-
     final cbuilder = CBuilder.library(
       sources: [addCUri.toFilePath()],
       name: name,
@@ -53,8 +51,7 @@
     );
     expect(
       () => cbuilder.run(
-        buildConfig: buildConfig,
-        buildOutput: buildOutput,
+        hookConfig: buildConfig,
         logger: logger,
       ),
       throwsException,
diff --git a/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_android_test.dart b/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_android_test.dart
index 250a72d..88c2739 100644
--- a/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_android_test.dart
+++ b/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_android_test.dart
@@ -136,7 +136,6 @@
         ? LinkModePreference.dynamic
         : LinkModePreference.static,
   );
-  final buildOutput = BuildOutput();
 
   final cbuilder = CBuilder.library(
     name: name,
@@ -145,8 +144,7 @@
     dartBuildFiles: ['hook/build.dart'],
   );
   await cbuilder.run(
-    buildConfig: buildConfig,
-    buildOutput: buildOutput,
+    hookConfig: buildConfig,
     logger: logger,
   );
 
diff --git a/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_ios_test.dart b/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_ios_test.dart
index 574b298..9f12c5e 100644
--- a/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_ios_test.dart
+++ b/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_ios_test.dart
@@ -68,7 +68,6 @@
                   : LinkModePreference.static,
               targetIOSSdk: targetIOSSdk,
             );
-            final buildOutput = BuildOutput();
 
             final cbuilder = CBuilder.library(
               name: name,
@@ -78,8 +77,7 @@
               dartBuildFiles: ['hook/build.dart'],
             );
             await cbuilder.run(
-              buildConfig: buildConfig,
-              buildOutput: buildOutput,
+              hookConfig: buildConfig,
               logger: logger,
             );
 
diff --git a/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_linux_host_test.dart b/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_linux_host_test.dart
index 0bad5ff..0b6f1df 100644
--- a/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_linux_host_test.dart
+++ b/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_linux_host_test.dart
@@ -55,7 +55,6 @@
               ? LinkModePreference.dynamic
               : LinkModePreference.static,
         );
-        final buildOutput = BuildOutput();
 
         final cbuilder = CBuilder.library(
           name: name,
@@ -64,8 +63,7 @@
           dartBuildFiles: ['hook/build.dart'],
         );
         await cbuilder.run(
-          buildConfig: buildConfig,
-          buildOutput: buildOutput,
+          hookConfig: buildConfig,
           logger: logger,
         );
 
diff --git a/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_macos_host_test.dart b/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_macos_host_test.dart
index 3f7a74f..7db010a 100644
--- a/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_macos_host_test.dart
+++ b/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_macos_host_test.dart
@@ -53,7 +53,6 @@
               ? LinkModePreference.dynamic
               : LinkModePreference.static,
         );
-        final buildOutput = BuildOutput();
 
         final cbuilder = CBuilder.library(
           name: name,
@@ -62,8 +61,7 @@
           dartBuildFiles: ['hook/build.dart'],
         );
         await cbuilder.run(
-          buildConfig: buildConfig,
-          buildOutput: buildOutput,
+          hookConfig: buildConfig,
           logger: logger,
         );
 
diff --git a/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_windows_host_test.dart b/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_windows_host_test.dart
index e189f71..06c45a7 100644
--- a/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_windows_host_test.dart
+++ b/pkgs/native_toolchain_c/test/cbuilder/cbuilder_cross_windows_host_test.dart
@@ -65,7 +65,6 @@
               ? LinkModePreference.dynamic
               : LinkModePreference.static,
         );
-        final buildOutput = BuildOutput();
 
         final cbuilder = CBuilder.library(
           name: name,
@@ -74,8 +73,7 @@
           dartBuildFiles: ['hook/build.dart'],
         );
         await cbuilder.run(
-          buildConfig: buildConfig,
-          buildOutput: buildOutput,
+          hookConfig: buildConfig,
           logger: logger,
         );
 
diff --git a/pkgs/native_toolchain_c/test/cbuilder/cbuilder_test.dart b/pkgs/native_toolchain_c/test/cbuilder/cbuilder_test.dart
index b40e73a..f309431 100644
--- a/pkgs/native_toolchain_c/test/cbuilder/cbuilder_test.dart
+++ b/pkgs/native_toolchain_c/test/cbuilder/cbuilder_test.dart
@@ -58,7 +58,6 @@
             envScriptArgs: envScriptArgs,
           ),
         );
-        final buildOutput = BuildOutput();
         final cbuilder = CBuilder.executable(
           name: name,
           sources: [helloWorldCUri.toFilePath()],
@@ -66,8 +65,7 @@
           dartBuildFiles: ['hook/build.dart'],
         );
         await cbuilder.run(
-          buildConfig: buildConfig,
-          buildOutput: buildOutput,
+          hookConfig: buildConfig,
           logger: logger,
         );
 
@@ -137,7 +135,6 @@
                   envScriptArgs: envScriptArgs,
                 ),
               );
-        final buildOutput = BuildOutput();
 
         final cbuilder = CBuilder.library(
           sources: [addCUri.toFilePath()],
@@ -147,8 +144,7 @@
           dartBuildFiles: ['hook/build.dart'],
         );
         await cbuilder.run(
-          buildConfig: buildConfig,
-          buildOutput: buildOutput,
+          hookConfig: buildConfig,
           logger: logger,
         );
 
@@ -231,7 +227,6 @@
         envScriptArgs: envScriptArgs,
       ),
     );
-    final buildOutput = BuildOutput();
 
     final flag = switch (buildConfig.targetOS) {
       OS.windows => '/DFOO=USER_FLAG',
@@ -245,8 +240,7 @@
       dartBuildFiles: ['hook/build.dart'],
     );
     await cbuilder.run(
-      buildConfig: buildConfig,
-      buildOutput: buildOutput,
+      hookConfig: buildConfig,
       logger: logger,
     );
 
@@ -289,7 +283,6 @@
         envScriptArgs: envScriptArgs,
       ),
     );
-    final buildOutput = BuildOutput();
 
     final cbuilder = CBuilder.library(
       name: name,
@@ -298,13 +291,12 @@
       sources: [includesCUri.toFilePath()],
       dartBuildFiles: ['hook/build.dart'],
     );
-    await cbuilder.run(
-      buildConfig: buildConfig,
-      buildOutput: buildOutput,
+    final (_, dependencies) = await cbuilder.run(
+      hookConfig: buildConfig,
       logger: logger,
     );
 
-    expect(buildOutput.dependencies, contains(includesHUri));
+    expect(dependencies, contains(includesHUri));
 
     final dylibUri = tempUri.resolve(OS.current.dylibFileName(name));
     final dylib = openDynamicLibraryForTest(dylibUri.toFilePath());
@@ -335,7 +327,6 @@
         envScriptArgs: envScriptArgs,
       ),
     );
-    final buildOutput = BuildOutput();
 
     final stdFlag = switch (buildConfig.targetOS) {
       OS.windows => '/std:$std',
@@ -350,8 +341,7 @@
       dartBuildFiles: ['hook/build.dart'],
     );
     await cbuilder.run(
-      buildConfig: buildConfig,
-      buildOutput: buildOutput,
+      hookConfig: buildConfig,
       logger: logger,
     );
 
@@ -395,7 +385,6 @@
         envScriptArgs: envScriptArgs,
       ),
     );
-    final buildOutput = BuildOutput();
 
     final defaultStdLibLinkFlag = switch (buildConfig.targetOS) {
       OS.windows => null,
@@ -411,8 +400,7 @@
       dartBuildFiles: ['hook/build.dart'],
     );
     await cbuilder.run(
-      buildConfig: buildConfig,
-      buildOutput: buildOutput,
+      hookConfig: buildConfig,
       logger: logger,
     );
 
@@ -460,7 +448,6 @@
         envScriptArgs: envScriptArgs,
       ),
     );
-    final buildOutput = BuildOutput();
     final cbuilder = CBuilder.executable(
       name: name,
       sources: [helloWorldCppUri.toFilePath()],
@@ -472,16 +459,14 @@
     if (buildConfig.targetOS == OS.windows) {
       await expectLater(
         () => cbuilder.run(
-          buildConfig: buildConfig,
-          buildOutput: buildOutput,
+          hookConfig: buildConfig,
           logger: logger,
         ),
         throwsArgumentError,
       );
     } else {
       await cbuilder.run(
-        buildConfig: buildConfig,
-        buildOutput: buildOutput,
+        hookConfig: buildConfig,
         logger: logger,
       );
 
@@ -532,7 +517,6 @@
       envScriptArgs: envScriptArgs,
     ),
   );
-  final buildOutput = BuildOutput();
   final cbuilder = CBuilder.executable(
     name: name,
     sources: [definesCUri.toFilePath()],
@@ -545,8 +529,7 @@
     dartBuildFiles: ['hook/build.dart'],
   );
   await cbuilder.run(
-    buildConfig: buildConfig,
-    buildOutput: buildOutput,
+    hookConfig: buildConfig,
     logger: logger,
   );
 
diff --git a/pkgs/native_toolchain_c/test/cbuilder/compiler_resolver_test.dart b/pkgs/native_toolchain_c/test/cbuilder/compiler_resolver_test.dart
index 1a2d408..d80e2a6 100644
--- a/pkgs/native_toolchain_c/test/cbuilder/compiler_resolver_test.dart
+++ b/pkgs/native_toolchain_c/test/cbuilder/compiler_resolver_test.dart
@@ -55,7 +55,7 @@
         envScript: envScript,
       ),
     );
-    final resolver = CompilerResolver(buildConfig: buildConfig, logger: logger);
+    final resolver = CompilerResolver(hookConfig: buildConfig, logger: logger);
     final compiler = await resolver.resolveCompiler();
     final archiver = await resolver.resolveArchiver();
     expect(compiler.uri, buildConfig.cCompiler.compiler);
@@ -74,7 +74,7 @@
       linkModePreference: LinkModePreference.dynamic,
     );
     final resolver = CompilerResolver(
-      buildConfig: buildConfig,
+      hookConfig: buildConfig,
       logger: logger,
       hostOS: OS.android, // This is never a host.
       hostArchitecture: Architecture.arm64, // This is never a host.