native
native copied to clipboard
[ffigen] Output dependencies & only rerun if dependencies change
Pulling some learnings from https://github.com/dart-lang/native/pull/977.
My preference would be to let a higher level of build system handle checking the file times, like Bazel or package:build or native assets.
👍 Great thinking about how this integrates in the larger eco system.
I think the FFIgen (and JNIgen) should be able to report the list of dependencies (https://github.com/dart-lang/native/issues/1008). We don't want every user of FFIgen (and JNIgen) to manually come up with a list of dependencies.
The logic of checking the files timestamps could maybe live in a shared package that then FFIgen, JNIgen, and native_assets_builder can reuse.
One question to ask is what abstraction to use for listing dependencies:
- File paths
- Directory paths (which would mean all files transitively in that directory, and it also means that if someone adds a file in such directory it's added).
- Glob patterns? (which would mean that any files added to the file system matching such pattern would trigger a rebuild). -> But not every build system wrapping FFIgen/JNIgen might be able consume glob patterns (native assets, package:build, ...)
Originally posted by @dcharkes in https://github.com/dart-lang/native/issues/977#issuecomment-1996980549
Some more edge cases to consider -
- Transitive dependencies could be changed
- ffigen version might be updated in pubspec.yaml
- Any updates to compiler-opts specified via the environment itself.
Originally posted by @mannprerak2 in https://github.com/dart-lang/native/issues/977#issuecomment-1984118360
I think the first step is to output a list of dependencies.