Skip to content

Emit a real framework for React-cxxstableapi under use_frameworks! (#57936) - #57936

Open
coado wants to merge 2 commits into
react:mainfrom
coado:export-D115859623
Open

Emit a real framework for React-cxxstableapi under use_frameworks! (#57936)#57936
coado wants to merge 2 commits into
react:mainfrom
coado:export-D115859623

Conversation

@coado

@coado coado commented Aug 13, 2026

Copy link
Copy Markdown
Contributor

Summary:

react/cxxstableapi is a header-only module — the stable API guards are pure
preprocessor headers with no compilable source. Under use_frameworks!,
CocoaPods emits a PBXAggregateTarget for a pod with no compilable sources, and
an aggregate target produces no .framework, so pods depending on
React-cxxstableapi cannot resolve the guard headers.

Add an anchor translation unit so the pod has one source and CocoaPods emits a
real framework target instead, and widen the podspec's build-from-source glob to
pick it up. The prebuilt glob stays headers-only, since prebuilt pods do not
generate frameworks. This mirrors the existing CSSDummy.cpp anchor for the
header-only React-renderercss pod.

Also register react/cxxstableapi as a subdirectory of the Fantom tester CMake
build so the guard headers resolve there.

Changelog: [Internal]

Differential Revision: D115859623

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Aug 13, 2026
@meta-codesync

meta-codesync Bot commented Aug 13, 2026

Copy link
Copy Markdown

@coado has exported this pull request. If you are a Meta employee, you can view the originating Diff in D115859623.

@facebook-github-tools facebook-github-tools Bot added p: Software Mansion Partner: Software Mansion Partner p: Facebook Partner: Facebook labels Aug 13, 2026
coado added 2 commits August 13, 2026 04:36
…rgets (react#57861)

Summary:

React Native's public C++ headers are gaining guards from `react/cxxstableapi`, which
turn a direct include of a fine-grained header into an error for consumers that opt into
the strict API by defining `RN_STRICT_API`. React Native's own sources keep including
those headers directly, so they are exempted via `RN_BUILDING`.

Unlike CocoaPods, these three build systems each have a single chokepoint:

- CMake: one `add_compile_definitions(RN_BUILDING)` in the ReactAndroid JNI project,
  a directory property inherited by every `add_react_common_subdir` below it. It is
  declared *after* the third-party NDK subdirectories so glog/boost/folly/fmt never see
  it, and this project never compiles app or third-party module code.
- SwiftPM: one `.define` in the shared `Target.reactNativeTarget` factory that every
  React Native target is created through. `cxxSettings` are per-target and are not
  inherited by packages that depend on React.
- Buck: a `_set_rn_building_flag` helper called from the four macros React Native's own
  targets use. It is `preprocessor_flags`, deliberately
  not `exported_preprocessor_flags`, so dependents are not exempted either.

This change is inert on its own: nothing behaves differently unless a consumer defines
`RN_STRICT_API`.

Changelog: [Internal]

Reviewed By: cipolleschi

Differential Revision: D115051088
…eact#57936)

Summary:

`react/cxxstableapi` is a header-only module — the stable API guards are pure
preprocessor headers with no compilable source. Under `use_frameworks!`,
CocoaPods emits a `PBXAggregateTarget` for a pod with no compilable sources, and
an aggregate target produces no `.framework`, so pods depending on
`React-cxxstableapi` cannot resolve the guard headers.

Add an anchor translation unit so the pod has one source and CocoaPods emits a
real framework target instead, and widen the podspec's build-from-source glob to
pick it up. The prebuilt glob stays headers-only, since prebuilt pods do not
generate frameworks. This mirrors the existing `CSSDummy.cpp` anchor for the
header-only `React-renderercss` pod.

Also register `react/cxxstableapi` as a subdirectory of the Fantom tester CMake
build so the guard headers resolve there.

Changelog: [Internal]

Differential Revision: D115859623
@meta-codesync meta-codesync Bot changed the title Emit a real framework for React-cxxstableapi under use_frameworks! Emit a real framework for React-cxxstableapi under use_frameworks! (#57936) Aug 13, 2026
@coado
coado force-pushed the export-D115859623 branch from eba13b8 to c00ab53 Compare August 13, 2026 11:36

@cortinico cortinico 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.

Review automatically exported from Phabricator review in Meta.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. meta-exported p: Facebook Partner: Facebook p: Software Mansion Partner: Software Mansion Partner

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants