Repository navigation
Support standalone AOT compilation and embed resources in html_resources.g.dart - #4298
Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces support for standalone AOT compilation in dartdoc by resolving the Dart SDK via package:cli_util and bundling lib/resources/ into a native asset compiled via hook/build.dart. Feedback on these changes suggests optimizing resource loading by caching the package URI resolution, avoiding the newly introduced C compiler dependency by utilizing a pure-Dart resource generation approach, avoiding fragile direct modifications to output.json in the build hook, and ensuring integration tests do not fail in environments lacking a C compiler.
| void main(List<String> args) async { | ||
| await build(args, (input, output) async { |
There was a problem hiding this comment.
Using hook/build.dart with CBuilder introduces a dependency on a C compiler (e.g., GCC, Clang, MSVC) for anyone compiling dartdoc to a standalone AOT executable (via dart build cli or dart install). This is a significant new requirement for a package that was previously pure Dart.
An alternative, pure-Dart approach would be to generate a Dart file containing the resource bytes (e.g., as base64-encoded strings or Uint8List literals) during development or as part of a code-generation step (similar to how html_resources.g.dart is generated). This would allow both JIT and AOT modes to load resources directly from Dart code without needing FFI, hook/build.dart, or a C compiler.
| (output.json['dependencies'] as List<Object?>?)?.remove( | ||
| cFile.uri.toFilePath(), | ||
| ); |
There was a problem hiding this comment.
Modifying output.json directly to remove cFile from dependencies is fragile and relies on the internal JSON schema of BuildOutput, which is not guaranteed to be stable across minor/patch versions of package:native_assets_cli or package:hooks.
If the C-compilation approach is kept, it would be safer to check if there is a public API or if the dependency can be tolerated, rather than directly manipulating the underlying JSON map.
szakarias
left a comment
There was a problem hiding this comment.
Thanks Sigurd — I agree this is a real problem, and the package:cli_util changes for locating the SDK look good to me.
I'm a bit hesitant about bundling the resources through a C build hook and FFI, though. It makes dart install dartdoc need a C compiler, adds hooks and native_toolchain_c as runtime dependencies of a package that ships in the SDK.
Let's have a quick chat before going further. Maybe we can explore some alternatives.
|
Good point — since |
| dartdoc: null | ||
|
|
||
| dependency_overrides: | ||
| cli_util: ^0.6.0 |
There was a problem hiding this comment.
could you perhaps add a short comment here on why the override is needed?
There was a problem hiding this comment.
Done — added a comment explaining that dev_dependency sass (via cli_pkg 2.16.0) still constrains cli_util to ^0.5.0 until cli_pkg 2.16.1 (google/dart_cli_pkg#268) is published.
Revisions updated by `dart tools/rev_sdk_deps.dart`. dartdoc (https://github.com/dart-lang/dartdoc/compare/2f6847b..03ec6df): 03ec6df6 Thu Nov 5 11:12:45 2026 +0200 Sergey G. Grekhov Add tests for type parameters (dart-lang/dartdoc#4308) 14a91302 Tue Nov 3 04:24:32 2026 +0100 Moritz Migrate to ecosystem health publish check and setup-dart publish workflow (dart-lang/dartdoc#4310) cd8bf52c Mon Nov 2 14:19:25 2026 +0100 Sigurd Meldgaard Support standalone AOT compilation and embed resources in html_resources.g.dart (dart-lang/dartdoc#4298) cb1b1b2f Mon Nov 2 14:39:28 2026 +0200 Sergey G. Grekhov Add tests for parameters (dart-lang/dartdoc#4304) 07506415 Mon Nov 2 12:14:22 2026 +0100 dependabot[bot] Bump the github-actions group across 1 directory with 3 updates (dart-lang/dartdoc#4311) 494aec7f Mon Nov 2 12:14:05 2026 +0100 Sarah Zakarias Add a "Documentation inherited from" note to inherited doc comments (dart-lang/dartdoc#4309) 527502a9 Mon Nov 2 11:21:46 2026 +0100 Sarah Zakarias Give the mock SDK the version of the SDK running the tests (dart-lang/dartdoc#4312) http (https://github.com/dart-lang/http/compare/1f869d0..4646fe6): 4646fe6 Thu Nov 5 02:41:04 2026 +0530 Chandra ObulaReddy [http] Don't throw in RetryClient when `when` has read the response stream (dart-lang/http#2040) native (https://github.com/dart-lang/native/compare/1838637..6287745): 6287745ca Thu Nov 5 20:37:11 2026 +0800 Dz [hooks_runner] Fix UTF-8 decoding of hook output on Windows (dart-lang/native#3772) 0eada93f9 Thu Nov 5 19:18:09 2026 +0800 Dz [native_toolchain_c] Decode vswhere UTF-8 output correctly on Windows (dart-lang/native#3773) Change-Id: If15b14dac054320ded19f0633a71b77463b9b718 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/574640 Auto-Submit: Nate Bosch <[email protected]> Commit-Queue: Nicholas Shahan <[email protected]> Reviewed-by: Nicholas Shahan <[email protected]>
Support compiling
dartdocto a standalone AOT executable (e.g. viadart install dartdocordart compile exe):dartexecutable viapackage:cli_util(cli_util.sdkPath/cli_util.dartExecutable).Platform.script.pathinto_dartdocFailedMessage(which in AOT mode resolves to afile:///URI for the compiled binary).bundledResourcesBase64inlib/src/generator/html_resources.g.dartviadart tool/task.dart build(buildResources), and fall back to decoding fromhtml_resources.g.dartinResourceLoader.loadResourceByteswhenIsolate.resolvePackageUrireturnsnullin AOT mode.Part of dart-lang/sdk#63210
Part of dart-lang/sdk#63186