Skip to content

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

Open
@dcharkes

Description

@dcharkes

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

final cbuilder = CBuilder.library(
name: packageName,
assetName: '$packageName.dart',
sources: [
'src/$packageName.c',
],
dartBuildFiles: ['hook/build.dart'],
);

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<String> 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<String> 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    contributions-welcomeContributions welcome to help resolve this (the resolution is expected to be clear from the issue)good first issueA good starting issue for contributors (issues with this label will appear in /contribute)package:native_toolchain_c

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions