dart-lang / dart-lang/native

[native_toolchain_c] Changes to header files should be added to the dependencies

Open
#1,332 3 comments 2 reactions 0 assignees View on GitHub
contributions-welcome good first issue package:native_toolchain_c
Dominant language
Dart
Stars
275
Forks
144
Avg merge
2d 10h
Merged PRs (30d)
47

Description

The CBuilder lists the C sources, but not the header files.

https://github.com/dart-lang/native/blob/952da66a77c09872816227f5313273d51a8f4ba5/pkgs/native_assets_cli/example/build/native_add_library/hook/build.dart#L12-L19

This means the headers are not added to the dependencies. Which means that any changes to the header files do not cause cache invalidation.

Thanks for the feedback @SaltySpaghetti!

Possible solutions:

1. Pass in the `.h` files to sources, which will add them to the compiler invocation (which is fine for clang-like compiler).
* Pro: Clanglike compilers can optimize if we pass the .h files to the compilation step. https://gcc.gnu.org/onlinedocs/gcc/Precompiled-Headers.html
* Not every compiler might like this. We can work around this by filtering `.h` files out.
* Pro: Similar design to GN/ninja, which also have the c and h files in a flat list.
2. Add the header directory to the `includes` (ty @blaugold!)
3. Add a `List headers` parameter/field. Which would only resolve the list of paths and add it to the `BuildOutput` dependencies.
* Pro: most to the point.
* Con: if there's other dependencies which are not header files this parameter can be used to shoe-horn these deps in.
4. Add a `List dependencies` parameter/field.
* Con: Is not as discoverable as `headers`.

I'm leaning towards option 1.

A PR would contain:

* [ ] Updating all example/test projects to include the header files in `sources: `
* [ ] Adding some documentation to `sources` that it should include header files.
* [ ] If needed for some compilers, filtering out `.h` files in the compiler invocation.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.