Skip to content

[ffigen] Add Input.appendCompilerOptions to append clang args to defaults (#3630) - #3676

Merged
liamappelbe merged 9 commits into
dart-lang:mainfrom
vikramsingh920:fix-ffigen-clang-args
Sep 23, 2026
Merged

liamappelbe merged 9 commits into
dart-lang:mainfrom
vikramsingh920:fix-ffigen-clang-args

Conversation

@vikramsingh920

@vikramsingh920 vikramsingh920 commented Sep 18, 2026 •

Copy link
Copy Markdown
Contributor

Description

Currently, setting custom compiler-opts in ffigen completely overwrites the default clang arguments (which include system header paths, host OS/architecture flags, and standard language flags like C++98 / C99). Most users only want to append extra arguments rather than replicate all of ffigen's default clang argument discovery logic

This PR addresses this by implementing Option 2 from #3630:

  • Adds Input.appendCompilerOptions (bool, defaults to false) to allow appending user-specified compiler options to the default clang flags.
  • When appendCompilerOptions is false, user-provided options replace the defaults, preserving backward compatibility.
  • Exposes computeCompilerOpts in config_types.dart to calculate the default compiler arguments based on language, target OS, and system headers.
  • Updates CHANGELOG.md and integration tests.

Related Issues

Fixes #3630

PR Checklist

  • I’ve reviewed the contributor guide and applied the relevant portions to this PR.
  • I've run dart tool/ci.dart --all locally and resolved all issues identified. This ensures the PR is formatted, has no lint errors, and ran all code generators. This applies to the packages part of the toplevel pubspec.yaml workspace.
  • All existing and new tests are passing. I added new tests to check the change I am making.
  • The PR is actually solving the issue. PRs that don't solve the issue will be closed. Please be respectful of the maintainers' time. If it's not clear what the issue is, feel free to ask questions on the GitHub issue before submitting a PR.
  • I have updated CHANGELOG.md for the relevant packages. (Not needed for small changes such as doc typos).
  • I have updated the pubspec package version if necessary.

@google-cla

google-cla Bot commented Sep 18, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@vikramsingh920

Copy link
Copy Markdown
Contributor Author

@googlebot I signed it!

@vikramsingh920

Copy link
Copy Markdown
Contributor Author

Hi @liamappelbe and @dcharkes, when you get a chance, could you please take a look at my PR #3676 and let me know if there’s anything I should change or improve? I’d really appreciate your feedback. Thanks!

@liamappelbe
liamappelbe self-requested a review September 21, 2026 01:27
@codecov

codecov Bot commented Sep 21, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 88.13%. Comparing base (ed7605f) to head (b206c99).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff           @@
##             main    #3676   +/-   ##
=======================================
  Coverage   88.13%   88.13%           
=======================================
  Files         306      306           
  Lines       19507    19511    +4     
=======================================
+ Hits        17192    17196    +4     
  Misses       2315     2315           
Flag Coverage Δ
ffigen 91.32% <100.00%> (+<0.01%) ⬆️
native_pkgs_macos 85.18% <ø> (ø)
native_pkgs_ubuntu 83.45% <ø> (ø)
native_pkgs_windows 87.78% <ø> (ø)
objective_c 63.06% <100.00%> (+0.01%) ⬆️
swiftgen 80.80% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Components Coverage Δ
code_assets 95.72% <ø> (ø)
data_assets 91.56% <ø> (ø)
ffi 100.00% <ø> (ø)
ffigen 91.42% <100.00%> (+<0.01%) ⬆️
hooks 86.40% <ø> (ø)
hooks_runner 89.76% <ø> (ø)
jni 66.34% <ø> (ø)
jni_flutter ∅ <ø> (∅)
jni_util ∅ <ø> (∅)
jnigen 82.77% <ø> (ø)
json_syntax_generator ∅ <ø> (∅)
native_test_helpers 85.71% <ø> (ø)
native_toolchain_c 95.94% <ø> (ø)
objective_c 79.47% <ø> (ø)
pub_formats ∅ <ø> (∅)
record_use 81.48% <ø> (ø)
swift2objc 92.95% <ø> (ø)
swiftgen 80.80% <ø> (ø)
test_case_selector 97.28% <ø> (ø)
Files with missing lines Coverage Δ
pkgs/ffigen/lib/src/config_provider/config.dart 100.00% <ø> (ø)
...s/ffigen/lib/src/config_provider/config_types.dart 84.73% <100.00%> (+0.73%) ⬆️
pkgs/ffigen/lib/src/context.dart 82.85% <100.00%> (-0.93%) ⬇️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@liamappelbe liamappelbe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. Just some minor comments.

Comment thread pkgs/ffigen/CHANGELOG.md
@@ -1,5 +1,7 @@
## 22.0.1-wip

- Added `Input.appendCompilerOptions` to allow appending custom compiler

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is adding a new API, so we should upgrade the new version to a minor version bump (here and in the pubspec.yaml): 22.1.0-wip

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done! i had upgragded the version to 22.1.0-wip in both pubspec.yaml and CHANGELOG.md

Comment thread pkgs/ffigen/lib/src/context.dart Outdated
late final compilerOpts = computeCompilerOpts(
input: config.input,
logger: logger,
cpp: config.cpp != null,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just pass in the entire config, rather than the input and cpp separately.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hmm got it.
i have updated computeCompilerOpts to take the entire config object instead of separate parameters, and updated the tests accordingly.

this.entryPoints = const [],
this.include = _includeDefault,
this.compilerOptions,
this.appendCompilerOptions = false,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is defaulting to false, but your PR description says it defauts to true. I think false is the right approach (otherwise it's a breaking change for existing users). So update the PR description.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch!
I’ve updated the PR description to clarify that it defaults to false to avoid breaking changes.

@@ -180,13 +180,18 @@ final class Input {
/// Command line arguments to pass to clang_compiler.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you document the behaviour as it relates to appendCompilerOptions? If people are reading this on the API docs, they won't see the comment below.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done!
Added documentation on compilerOptions explaining that it replaces default compiler options unless appendCompilerOptions is set to true.

@vikramsingh920

vikramsingh920 commented Sep 22, 2026 •

Copy link
Copy Markdown
Contributor Author

Hi @liamappelbe, I’ve addressed all the review comments and pushed the changes.
Could you please take another look when you get a chance? Thanks!

@liamappelbe
liamappelbe merged commit 5cee1d0 into dart-lang:main Sep 23, 2026
62 checks passed
Hassnaa9 pushed a commit to Hassnaa9/native that referenced this pull request Sep 27, 2026
copybara-service Bot pushed a commit to dart-lang/sdk that referenced this pull request Oct 6, 2026
Revisions updated by `dart tools/rev_sdk_deps.dart`.

native (https://github.com/dart-lang/native/compare/f628b26..27f7678):
  27f767827  Mon Sep 28 14:51:28 2026 +0200  Daco Harkes  [hooks_runner] Remove `KernelAssets` and `Target` (dart-lang/native#3703)
  ddc7d6deb  Mon Sep 28 05:40:03 2026 +0200  Jakob Kordež  [ffigen] Skip typedefs to function pointers with unsupported parameter types (dart-lang/native#3694)
  177d283d9  Mon Sep 28 04:30:28 2026 +0200  Jakob Kordež  [ffigen] Generate bindings for C++ enums, structs and unions nested in namespaces and records (dart-lang/native#3644)
  5ee8f67d8  Mon Sep 28 11:39:14 2026 +1000  Liam Appelbe  [objective_c] Clarify block isolate scoping (dart-lang/native#3692)
  25f090116  Fri Sep 25 12:09:12 2026 +1000  Liam Appelbe  [ffigen][jnigen] Deprecate YAML config (dart-lang/native#3654)
  8364413eb  Fri Sep 25 10:09:50 2026 +1000  Liam Appelbe  [jnigen] Document nullability (dart-lang/native#3690)
  e8d518574  Thu Sep 24 18:02:46 2026 +1000  Liam Appelbe  [ffigen] Code snippet-ify ffigen and objective_c (dart-lang/native#3685)
  663385955  Thu Sep 24 03:21:53 2026 +0300  Manar Elhabbal  [ffigen] prevent setting both cpp and objectiveC in ffigenerator (dart-lang/native#3687)
  1cf40952a  Thu Sep 24 09:27:09 2026 +1000  Liam Appelbe  [objective_c] Remove arm64e build hack (dart-lang/native#3680)
  c44550b6e  Wed Sep 23 13:01:33 2026 +0200  Simon Binder  [web_assets] Scaffold package (dart-lang/native#3610)
  57b4bad69  Wed Sep 23 16:21:27 2026 +1000  Liam Appelbe  [swift2objc] Code snippet-ify swift2objc (dart-lang/native#3684)
  5cee1d0be  Wed Sep 23 10:16:29 2026 +0530  Rachit Vikram Singh  [ffigen] Add Input.appendCompilerOptions to append clang args to defaults (`#3630`) (dart-lang/native#3676)
  225a648df  Wed Sep 23 14:37:13 2026 +1000  Liam Appelbe  [jnigen] Code snippet-ify jnigen and co (dart-lang/native#3641)
  2030decf9  Wed Sep 23 13:51:24 2026 +1000  Liam Appelbe  [infra] Move snippets_tool to its own package (dart-lang/native#3683)
  6fa2beea2  Wed Sep 23 12:14:28 2026 +1000  Liam Appelbe  [objective_c] Revert `#3664` (dart-lang/native#3681)
  ed7605f8a  Tue Sep 22 12:03:22 2026 +0530  Sivapriya  [jni] Add deep conversion utils (dart-lang/native#3635)
  8574b7422  Tue Sep 22 08:31:11 2026 +0200  Lukas Klingsbo  [ffigen] Allow package:cli_util 0.5.x and 0.6.x (dart-lang/native#3673)

test (https://github.com/dart-lang/test/compare/9946c95..4f92d53):
  4f92d530  Fri Sep 25 16:46:22 2026 -0700  Nate Bosch  Unskip a test on windows (dart-lang/test#2772)
  7fb84866  Fri Sep 25 14:52:39 2026 -0700  Nate Bosch  Bundle skips at the end of the GitHub reporter (dart-lang/test#2768)
  603e5ec5  Thu Sep 24 14:00:41 2026 -0700  Nate Bosch  Clean up the runner's temporary directories (dart-lang/test#2763)
  4bf04d90  Thu Sep 24 12:41:15 2026 -0700  Nate Bosch  Refactor signal handling in executable.dart (dart-lang/test#2765)
  2c660a84  Tue Sep 22 15:33:34 2026 -0700  Nate Bosch  Regenerate mono_repo output (dart-lang/test#2767)

tools (https://github.com/dart-lang/tools/compare/3614ce0..d87eaf7):
  d87eaf79  Thu Sep 24 08:31:33 2026 -0700  Kevin Moore  fix(benchmark_harness): migrate subprocess spawning to package:cli_util (dart-lang/tools#2585)
  8ccf8ccf  Wed Sep 23 05:09:10 2026 +0530  Aman Maurya  [string_scanner] Extract a mixin for LineScanner and deduplicate eager scanning logic (dart-lang/tools#2569)
  afcdd6d9  Tue Sep 22 15:38:07 2026 +0200  Morgan :)  Document that watch events converge on filesystem state. (dart-lang/tools#2607)
  f2157cbc  Tue Sep 22 04:52:58 2026 +0300  Hasan Armoush  [code_builder] Add null-aware cascades, cascade index, and fluent cascade helpers (dart-lang/tools#2540)

web (https://github.com/dart-lang/web/compare/e5c6c02..ec71a4c):
  ec71a4c  Mon Sep 28 10:07:01 2026 -0700  Kevin Moore  [js_interop_gen] Require `code_builder: ^4.12.0` and update golden headers (dart-lang/web#576)

[email protected]

Change-Id: I766bc5b2b1297e3251990821bb73387ba685e39b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/556320
Commit-Queue: Nate Bosch <[email protected]>
Reviewed-by: Brian Quinlan <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ffigen] Improve API for clang args

2 participants