From 21762ed0b310fce5f1d20bfbd2b92c0f42a5441f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Ma=C5=82ecki?= Date: Fri, 21 Aug 2026 01:21:04 -0700 Subject: [PATCH 1/4] Add stable public MapBuffer C++ entry point Summary: Add `` as the canonical public C++ entry point for MapBuffer and MapBufferBuilder. Guard direct leaf-header inclusion for strict API consumers while preserving existing React Native builds and legacy include paths. Export and stage the umbrella consistently through Buck, CMake, Android Prefab, CocoaPods, and the Apple prebuilt-header inventory. Changelog: [General][Added] - Add `` as the stable public C++ entry point for MapBuffer Differential Revision: D116632721 --- .../ReactAndroid/build.gradle.kts | 1 + .../ReactCommon/React-Mapbuffer.podspec | 9 ++++++- .../react/renderer/mapbuffer/CMakeLists.txt | 2 +- .../react/renderer/mapbuffer/MapBuffer.h | 1 + .../renderer/mapbuffer/MapBufferBuilder.h | 1 + .../renderer/mapbuffer/React/MapBuffer.h | 27 +++++++++++++++++++ .../scripts/ios-prebuild/headers-config.js | 16 +++++++++++ 7 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 packages/react-native/ReactCommon/react/renderer/mapbuffer/React/MapBuffer.h diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index 35d649309b60..3ed3fbe9d3c1 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -252,6 +252,7 @@ val preparePrefab by "react/renderer/leakchecker/", ), Pair("../ReactCommon/react/renderer/mapbuffer/", "react/renderer/mapbuffer/"), + Pair("../ReactCommon/react/renderer/mapbuffer/React/", "React/"), Pair("../ReactCommon/react/renderer/mounting/", "react/renderer/mounting/"), Pair( "../ReactCommon/react/renderer/runtimescheduler/", diff --git a/packages/react-native/ReactCommon/React-Mapbuffer.podspec b/packages/react-native/ReactCommon/React-Mapbuffer.podspec index 74cef67a4e40..133f9e5010f0 100644 --- a/packages/react-native/ReactCommon/React-Mapbuffer.podspec +++ b/packages/react-native/ReactCommon/React-Mapbuffer.podspec @@ -26,14 +26,21 @@ Pod::Spec.new do |s| s.platforms = min_supported_versions s.source = source s.source_files = podspec_sources("react/renderer/mapbuffer/*.{cpp,h}", "react/renderer/mapbuffer/*.h") - s.exclude_files = "react/renderer/mapbuffer/tests" + s.exclude_files = ["react/renderer/mapbuffer/tests", "react/renderer/mapbuffer/React"] s.public_header_files = 'react/renderer/mapbuffer/*.h' s.header_dir = "react/renderer/mapbuffer" s.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => ["\"$(PODS_TARGET_SRCROOT)\""], "USE_HEADERMAP" => "YES", "CLANG_CXX_LANGUAGE_STANDARD" => rct_cxx_language_standard() } + s.subspec "MapBufferUmbrella" do |ss| + ss.source_files = "react/renderer/mapbuffer/React/*.h" + ss.header_dir = "React" + ss.header_mappings_dir = "react/renderer/mapbuffer/React" + end + resolve_use_frameworks(s, header_mappings_dir: './', module_name: "React_Mapbuffer") + s.dependency "React-cxxstableapi" add_dependency(s, "React-debug") add_rn_third_party_dependencies(s) add_rncore_dependency(s) diff --git a/packages/react-native/ReactCommon/react/renderer/mapbuffer/CMakeLists.txt b/packages/react-native/ReactCommon/react/renderer/mapbuffer/CMakeLists.txt index 0930ec9ee1b2..0d0ef6c27be2 100644 --- a/packages/react-native/ReactCommon/react/renderer/mapbuffer/CMakeLists.txt +++ b/packages/react-native/ReactCommon/react/renderer/mapbuffer/CMakeLists.txt @@ -11,6 +11,6 @@ file(GLOB react_renderer_mapbuffer_SRC CONFIGURE_DEPENDS *.cpp) add_library(react_renderer_mapbuffer OBJECT ${react_renderer_mapbuffer_SRC}) target_include_directories(react_renderer_mapbuffer PUBLIC ${REACT_COMMON_DIR}) -target_link_libraries(react_renderer_mapbuffer glog glog_init react_debug) +target_link_libraries(react_renderer_mapbuffer glog glog_init react_cxxstableapi react_debug) target_compile_reactnative_options(react_renderer_mapbuffer PRIVATE) target_compile_options(react_renderer_mapbuffer PRIVATE -Wpedantic) diff --git a/packages/react-native/ReactCommon/react/renderer/mapbuffer/MapBuffer.h b/packages/react-native/ReactCommon/react/renderer/mapbuffer/MapBuffer.h index 07b64bdfba99..d57b5ef2e9a7 100644 --- a/packages/react-native/ReactCommon/react/renderer/mapbuffer/MapBuffer.h +++ b/packages/react-native/ReactCommon/react/renderer/mapbuffer/MapBuffer.h @@ -7,6 +7,7 @@ #pragma once +#include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/mapbuffer/MapBufferBuilder.h b/packages/react-native/ReactCommon/react/renderer/mapbuffer/MapBufferBuilder.h index 2963c77a9b36..66a36a94b2f7 100644 --- a/packages/react-native/ReactCommon/react/renderer/mapbuffer/MapBufferBuilder.h +++ b/packages/react-native/ReactCommon/react/renderer/mapbuffer/MapBufferBuilder.h @@ -7,6 +7,7 @@ #pragma once +#include #include #include #include "MapBuffer.h" diff --git a/packages/react-native/ReactCommon/react/renderer/mapbuffer/React/MapBuffer.h b/packages/react-native/ReactCommon/react/renderer/mapbuffer/React/MapBuffer.h new file mode 100644 index 000000000000..898a7befe37e --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/mapbuffer/React/MapBuffer.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +// ============================================================================= +// Umbrella header for the `react/renderer/mapbuffer` module - public entry point. +// +// #include +// +// Re-exports the module's public interface headers. React Native's own code +// should keep using the fine-grained `` includes; +// only outside consumers use this umbrella. +// ============================================================================= + +// Marks that the following headers are pulled in through the umbrella, so their +// shared guard () accepts them. +#define RN_UMBRELLA_CONTEXT + +#include +#include + +#undef RN_UMBRELLA_CONTEXT diff --git a/packages/react-native/scripts/ios-prebuild/headers-config.js b/packages/react-native/scripts/ios-prebuild/headers-config.js index d794aad3b174..ccf4d23a6ac4 100644 --- a/packages/react-native/scripts/ios-prebuild/headers-config.js +++ b/packages/react-native/scripts/ios-prebuild/headers-config.js @@ -466,6 +466,22 @@ const PodspecExceptions /*: {[key: string]: PodSpecConfiguration} */ = { }, ], }, + 'ReactCommon/React-Mapbuffer.podspec': { + name: 'React-Mapbuffer', + headerPatterns: ['react/renderer/mapbuffer/**/*.h'], + excludePatterns: [ + 'react/renderer/mapbuffer/tests', + 'react/renderer/mapbuffer/React', + ], + headerDir: 'react/renderer/mapbuffer', + subSpecs: [ + { + name: 'MapBufferUmbrella', + headerPatterns: ['react/renderer/mapbuffer/React/*.h'], + headerDir: 'React', + }, + ], + }, 'ReactCommon/React-FabricImage.podspec': { name: 'React-FabricImage', headerPatterns: ['react/renderer/components/image/**/*.h'], From 80b5ef2f8ff2e501fb4e9be43ef8611ba9770a1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Ma=C5=82ecki?= Date: Fri, 21 Aug 2026 01:21:04 -0700 Subject: [PATCH 2/4] Add umbrella for `react/renderer/uimanager` subtree Summary: Rolls the umbrella-header + include-guard mechanism across the `react/renderer/uimanager` module, classifying the target as public. - Adds ``, re-exporting the module's public interface headers. - Adds `` to the module's public headers. - Wires the umbrella header directory into the Buck, CMake, CocoaPods, Gradle, and iOS prebuild header configurations. React Native's own sources keep using the fine-grained `` includes; only outside consumers use the umbrella. Changelog: [Internal] Differential Revision: D116763079 --- .../ReactAndroid/build.gradle.kts | 1 + .../ReactCommon/React-Fabric.podspec | 6 +++ .../renderer/uimanager/AppRegistryBinding.h | 2 + .../react/renderer/uimanager/CMakeLists.txt | 1 + .../uimanager/LayoutAnimationStatusDelegate.h | 2 + .../renderer/uimanager/LayoutEventEmitter.h | 2 + .../uimanager/PointerEventsProcessor.h | 2 + .../renderer/uimanager/PointerHoverTracker.h | 2 + .../renderer/uimanager/React/UIManager.h | 41 +++++++++++++++++++ .../react/renderer/uimanager/UIManager.h | 2 + .../uimanager/UIManagerAnimationBackend.h | 2 + .../uimanager/UIManagerAnimationDelegate.h | 2 + .../renderer/uimanager/UIManagerBinding.h | 2 + .../renderer/uimanager/UIManagerCommitHook.h | 2 + .../renderer/uimanager/UIManagerDelegate.h | 2 + .../renderer/uimanager/UIManagerMountHook.h | 2 + .../UIManagerNativeAnimatedDelegate.h | 2 + .../UIManagerViewTransitionDelegate.h | 2 + .../react/renderer/uimanager/primitives.h | 2 + .../scripts/ios-prebuild/headers-config.js | 6 +++ 20 files changed, 85 insertions(+) create mode 100644 packages/react-native/ReactCommon/react/renderer/uimanager/React/UIManager.h diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index 3ed3fbe9d3c1..245f986adf20 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -160,6 +160,7 @@ val preparePrefab by Pair("../ReactCommon/react/renderer/scheduler/", "react/renderer/scheduler/"), // react_renderer_uimanager Pair("../ReactCommon/react/renderer/uimanager/", "react/renderer/uimanager/"), + Pair("../ReactCommon/react/renderer/uimanager/React/", "React/"), // react_utils Pair("../ReactCommon/react/utils/", "react/utils/"), // rrc_image diff --git a/packages/react-native/ReactCommon/React-Fabric.podspec b/packages/react-native/ReactCommon/React-Fabric.podspec index f86733e6c181..275c83ab9a41 100644 --- a/packages/react-native/ReactCommon/React-Fabric.podspec +++ b/packages/react-native/ReactCommon/React-Fabric.podspec @@ -250,6 +250,12 @@ Pod::Spec.new do |s| ss.header_dir = "react/renderer/uimanager" end + s.subspec "uimanagerUmbrella" do |ss| + ss.source_files = "react/renderer/uimanager/React/*.h" + ss.header_dir = "React" + ss.header_mappings_dir = "react/renderer/uimanager/React" + end + s.subspec "leakchecker" do |ss| ss.source_files = podspec_sources("react/renderer/leakchecker/**/*.{cpp,h}", "react/renderer/leakchecker/**/*.h") ss.exclude_files = "react/renderer/leakchecker/tests" diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/AppRegistryBinding.h b/packages/react-native/ReactCommon/react/renderer/uimanager/AppRegistryBinding.h index f71565b9149b..68e59c572105 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/AppRegistryBinding.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/AppRegistryBinding.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/CMakeLists.txt b/packages/react-native/ReactCommon/react/renderer/uimanager/CMakeLists.txt index 388602c0d6e3..f8e0b076c868 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/CMakeLists.txt +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/CMakeLists.txt @@ -18,6 +18,7 @@ target_link_libraries(react_renderer_uimanager folly_runtime jsi react_cxxreact + react_cxxstableapi react_debug react_featureflags react_renderer_componentregistry diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/LayoutAnimationStatusDelegate.h b/packages/react-native/ReactCommon/react/renderer/uimanager/LayoutAnimationStatusDelegate.h index 821cb2531a57..880fff380eb9 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/LayoutAnimationStatusDelegate.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/LayoutAnimationStatusDelegate.h @@ -7,6 +7,8 @@ #pragma once +#include + namespace facebook::react { class LayoutAnimationStatusDelegate { diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/LayoutEventEmitter.h b/packages/react-native/ReactCommon/react/renderer/uimanager/LayoutEventEmitter.h index 4506cfabc8de..dc4d1d4e6731 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/LayoutEventEmitter.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/LayoutEventEmitter.h @@ -7,6 +7,8 @@ #pragma once +#include + #include namespace facebook::react { diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/PointerEventsProcessor.h b/packages/react-native/ReactCommon/react/renderer/uimanager/PointerEventsProcessor.h index e39dcf5f21db..8f65f8458b1a 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/PointerEventsProcessor.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/PointerEventsProcessor.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/PointerHoverTracker.h b/packages/react-native/ReactCommon/react/renderer/uimanager/PointerHoverTracker.h index 712a3cdfffc2..cc590924dfe9 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/PointerHoverTracker.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/PointerHoverTracker.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/React/UIManager.h b/packages/react-native/ReactCommon/react/renderer/uimanager/React/UIManager.h new file mode 100644 index 000000000000..0eb6cedb315b --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/React/UIManager.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +// ============================================================================= +// Umbrella header for the `react/renderer/uimanager` module - public entry +// point. +// +// #include +// +// Re-exports the module's public interface headers. React Native's own code +// should keep using the fine-grained `` includes; +// only outside consumers use this umbrella. +// ============================================================================= + +// Marks that the following headers are pulled in through the umbrella, so their +// shared guard () accepts them. +#define RN_UMBRELLA_CONTEXT + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#undef RN_UMBRELLA_CONTEXT diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h index f7452c8defe6..223dcae26a83 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManager.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerAnimationBackend.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerAnimationBackend.h index 27c39b18e5e0..a6ffded2ac8e 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerAnimationBackend.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerAnimationBackend.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerAnimationDelegate.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerAnimationDelegate.h index ac310eb4ad96..36cb9140a929 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerAnimationDelegate.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerAnimationDelegate.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerBinding.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerBinding.h index 0d1910b442b6..8133ac07a443 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerBinding.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerBinding.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h index 30f5d0e6d61e..2bb6940bf5d6 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerCommitHook.h @@ -7,6 +7,8 @@ #pragma once +#include + #include namespace facebook::react { diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h index ef4dd73de763..e5c761302439 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerMountHook.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerMountHook.h index 763efb8b3535..ab2071590d95 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerMountHook.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerMountHook.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include "UIManager.h" diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerNativeAnimatedDelegate.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerNativeAnimatedDelegate.h index a163a3741a59..0e524ba0a864 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerNativeAnimatedDelegate.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerNativeAnimatedDelegate.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerViewTransitionDelegate.h b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerViewTransitionDelegate.h index 3fa4c0e1261b..94229732f313 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerViewTransitionDelegate.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/UIManagerViewTransitionDelegate.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/uimanager/primitives.h b/packages/react-native/ReactCommon/react/renderer/uimanager/primitives.h index ae798d078ebf..39e57403116f 100644 --- a/packages/react-native/ReactCommon/react/renderer/uimanager/primitives.h +++ b/packages/react-native/ReactCommon/react/renderer/uimanager/primitives.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include #include diff --git a/packages/react-native/scripts/ios-prebuild/headers-config.js b/packages/react-native/scripts/ios-prebuild/headers-config.js index ccf4d23a6ac4..2045b50ceae2 100644 --- a/packages/react-native/scripts/ios-prebuild/headers-config.js +++ b/packages/react-native/scripts/ios-prebuild/headers-config.js @@ -231,6 +231,12 @@ const PodspecExceptions /*: {[key: string]: PodSpecConfiguration} */ = { headerDir: 'react/renderer/uimanager', }, + { + name: 'uimanagerUmbrella', + headerPatterns: ['react/renderer/uimanager/React/*.h'], + headerDir: 'React', + }, + { name: 'leakchecker', headerPatterns: ['react/renderer/leakchecker/**/*.h'], From 2ea8c3f5be1427f7b9bf5f6772c0939ffadb96c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Ma=C5=82ecki?= Date: Fri, 21 Aug 2026 03:15:08 -0700 Subject: [PATCH 3/4] Add umbrella for `react/renderer/graphics` subtree Summary: Rolls the umbrella-header + include-guard mechanism across the `react/renderer/graphics` module, classifying the target as public. - Adds ``, re-exporting the module's public interface headers. - Adds `` to 24 root headers and all 18 platform headers. - Wires the umbrella header directory into the Buck, CMake, CocoaPods, Gradle, and iOS prebuild header configurations. `conversions.h` and `Geometry.h` are deliberately left unguarded. Both are deprecation shims whose only content is a `#warning` redirecting to their replacements; guarding them would bury that migration hint under a hard error, and their enforcement is inherited from the headers they forward to. `RCTPlatformColorUtils.h` is guarded but intentionally absent from the umbrella. It is an Objective-C++ header (`UIColor` / `RCTUIColor`, `#import `), so including it would make the umbrella uncompilable from a plain C++ translation unit on Apple platforms. By contrast `configurePlatformColorCacheInvalidationHook.h` is plain C++ but exists only on Android, so it is included behind `#ifdef ANDROID`, following the pattern already used by ``. `PlatformColorParser.h` and `fromRawValueShared.h` include `react/renderer/core/RawValue.h`, which was only reachable on Apple platforms because `react/renderer/core:rawValue` was restricted to `platforms = APPLE`. No source inside the graphics target included those headers off-Apple, so the breakage was latent and invisible; reaching them through the umbrella surfaces it. This change therefore widens `:rawValue` to all platforms and gives graphics an unconditional dependency on it. That target exists specifically to break the core/graphics dependency cycle, so no new cycle is introduced. Also adds `tests/UmbrellaCompileTest.cpp`, which does nothing but include the umbrella. No target compiled any umbrella header before this, so a non-compiling umbrella could previously only be discovered by downstream consumers. Changelog: [General][Added] - Add `` umbrella header for the graphics C++ module [Android][Fixed] - Fix `react/renderer/graphics` failing to compile `PlatformColorParser.h` on Android Differential Revision: D116779866 --- .../ReactAndroid/build.gradle.kts | 1 + .../react/renderer/graphics/BackgroundImage.h | 2 + .../renderer/graphics/BackgroundPosition.h | 2 + .../renderer/graphics/BackgroundRepeat.h | 2 + .../react/renderer/graphics/BackgroundSize.h | 2 + .../react/renderer/graphics/BlendMode.h | 2 + .../react/renderer/graphics/BoxShadow.h | 2 + .../react/renderer/graphics/CMakeLists.txt | 1 + .../react/renderer/graphics/Color.h | 2 + .../react/renderer/graphics/ColorComponents.h | 2 + .../react/renderer/graphics/ColorStop.h | 2 + .../react/renderer/graphics/Filter.h | 2 + .../react/renderer/graphics/Isolation.h | 2 + .../react/renderer/graphics/LinearGradient.h | 2 + .../react/renderer/graphics/Point.h | 2 + .../react/renderer/graphics/RadialGradient.h | 2 + .../renderer/graphics/React-graphics.podspec | 8 +++ .../react/renderer/graphics/React/Graphics.h | 57 +++++++++++++++++++ .../react/renderer/graphics/Rect.h | 2 + .../renderer/graphics/RectangleCorners.h | 2 + .../react/renderer/graphics/RectangleEdges.h | 2 + .../react/renderer/graphics/Size.h | 2 + .../react/renderer/graphics/Transform.h | 2 + .../react/renderer/graphics/TransformUtils.h | 2 + .../react/renderer/graphics/ValueUnit.h | 2 + .../react/renderer/graphics/Vector.h | 2 + .../renderer/graphics/fromRawValueShared.h | 2 + .../android/react/renderer/graphics/Float.h | 2 + .../renderer/graphics/HostPlatformColor.h | 2 + .../renderer/graphics/PlatformColorParser.h | 2 + ...figurePlatformColorCacheInvalidationHook.h | 2 + .../cxx/react/renderer/graphics/Float.h | 2 + .../renderer/graphics/HostPlatformColor.h | 2 + .../renderer/graphics/PlatformColorParser.h | 2 + .../ios/react/renderer/graphics/Float.h | 2 + .../renderer/graphics/HostPlatformColor.h | 2 + .../renderer/graphics/PlatformColorParser.h | 2 + .../renderer/graphics/RCTPlatformColorUtils.h | 2 + .../react/renderer/graphics/rounding.h | 2 + .../graphics/tests/UmbrellaCompileTest.cpp | 8 +++ .../scripts/ios-prebuild/headers-config.js | 12 ++++ 41 files changed, 157 insertions(+) create mode 100644 packages/react-native/ReactCommon/react/renderer/graphics/React/Graphics.h create mode 100644 packages/react-native/ReactCommon/react/renderer/graphics/tests/UmbrellaCompileTest.cpp diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index 245f986adf20..e3ab24175429 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -147,6 +147,7 @@ val preparePrefab by Pair("../ReactCommon/react/renderer/debug/", "react/renderer/debug/"), // react_renderer_graphics Pair("../ReactCommon/react/renderer/graphics/", "react/renderer/graphics/"), + Pair("../ReactCommon/react/renderer/graphics/React/", "React/"), Pair("../ReactCommon/react/renderer/graphics/platform/android/", ""), // react_renderer_imagemanager Pair( diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/BackgroundImage.h b/packages/react-native/ReactCommon/react/renderer/graphics/BackgroundImage.h index d156126f251c..ab0c62e506ca 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/BackgroundImage.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/BackgroundImage.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/BackgroundPosition.h b/packages/react-native/ReactCommon/react/renderer/graphics/BackgroundPosition.h index 37a2693896bc..12d539bf80c6 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/BackgroundPosition.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/BackgroundPosition.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/BackgroundRepeat.h b/packages/react-native/ReactCommon/react/renderer/graphics/BackgroundRepeat.h index 15edff00a407..e018fd395a53 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/BackgroundRepeat.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/BackgroundRepeat.h @@ -7,6 +7,8 @@ #pragma once +#include + namespace facebook::react { enum class BackgroundRepeatStyle { diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/BackgroundSize.h b/packages/react-native/ReactCommon/react/renderer/graphics/BackgroundSize.h index 5b0f52cee7e1..90fd8a335490 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/BackgroundSize.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/BackgroundSize.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/BlendMode.h b/packages/react-native/ReactCommon/react/renderer/graphics/BlendMode.h index 25a1c91232b6..eefa2bacd969 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/BlendMode.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/BlendMode.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/BoxShadow.h b/packages/react-native/ReactCommon/react/renderer/graphics/BoxShadow.h index f8be37cc06e1..b8664bc44a37 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/BoxShadow.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/BoxShadow.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/CMakeLists.txt b/packages/react-native/ReactCommon/react/renderer/graphics/CMakeLists.txt index 7113ce1bcdc6..640f45ccb20a 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/CMakeLists.txt +++ b/packages/react-native/ReactCommon/react/renderer/graphics/CMakeLists.txt @@ -29,6 +29,7 @@ target_link_libraries(react_renderer_graphics glog ${fbjni} folly_runtime + react_cxxstableapi react_debug react_renderer_debug react_utils diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/Color.h b/packages/react-native/ReactCommon/react/renderer/graphics/Color.h index 16905f62a3d2..3e5dd1f5593b 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/Color.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/Color.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/ColorComponents.h b/packages/react-native/ReactCommon/react/renderer/graphics/ColorComponents.h index ce60f7a4074f..37854e31fff6 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/ColorComponents.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/ColorComponents.h @@ -7,6 +7,8 @@ #pragma once +#include + namespace facebook::react { enum class ColorSpace { sRGB, DisplayP3 }; diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/ColorStop.h b/packages/react-native/ReactCommon/react/renderer/graphics/ColorStop.h index b3136d4238b0..1febc2e3495b 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/ColorStop.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/ColorStop.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/Filter.h b/packages/react-native/ReactCommon/react/renderer/graphics/Filter.h index f4c1c2613080..fc18207f93a2 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/Filter.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/Filter.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/Isolation.h b/packages/react-native/ReactCommon/react/renderer/graphics/Isolation.h index 9b9b2a1e630e..296ab737e021 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/Isolation.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/Isolation.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/LinearGradient.h b/packages/react-native/ReactCommon/react/renderer/graphics/LinearGradient.h index 57168c953b19..098f9b466755 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/LinearGradient.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/LinearGradient.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/Point.h b/packages/react-native/ReactCommon/react/renderer/graphics/Point.h index c9bf3297d0b3..da9a67b62e8c 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/Point.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/Point.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/RadialGradient.h b/packages/react-native/ReactCommon/react/renderer/graphics/RadialGradient.h index 012487e7f828..7aa75ef7e29a 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/RadialGradient.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/RadialGradient.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/React-graphics.podspec b/packages/react-native/ReactCommon/react/renderer/graphics/React-graphics.podspec index a164d8ef3db1..5445ed1f97ab 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/React-graphics.podspec +++ b/packages/react-native/ReactCommon/react/renderer/graphics/React-graphics.podspec @@ -31,6 +31,7 @@ Pod::Spec.new do |s| s.platforms = min_supported_versions s.source = source s.source_files = podspec_sources(source_files, ["*.h", "platform/ios/**/*.h"]) + s.exclude_files = "React" s.header_dir = "react/renderer/graphics" s.framework = "UIKit" @@ -38,6 +39,12 @@ Pod::Spec.new do |s| header_search_paths = header_search_paths + ["\"$(PODS_TARGET_SRCROOT)/platform/ios\""] end + s.subspec "GraphicsUmbrella" do |ss| + ss.source_files = "React/*.h" + ss.header_dir = "React" + ss.header_mappings_dir = "React" + end + resolve_use_frameworks(s, header_mappings_dir: "../../..", module_name: "React_graphics") s.pod_target_xcconfig = { "USE_HEADERMAP" => "NO", @@ -50,6 +57,7 @@ Pod::Spec.new do |s| s.dependency "React-featureflags" s.dependency "React-utils" s.dependency "React-rendererdebug" + s.dependency "React-cxxstableapi" depend_on_js_engine(s) add_rn_third_party_dependencies(s) diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/React/Graphics.h b/packages/react-native/ReactCommon/react/renderer/graphics/React/Graphics.h new file mode 100644 index 000000000000..1867cbd81134 --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/graphics/React/Graphics.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +// ============================================================================= +// Umbrella header for the `react/renderer/graphics` module - public entry +// point. +// +// #include +// +// Re-exports the module's public interface headers. React Native's own code +// should keep using the fine-grained `` includes; +// only outside consumers use this umbrella. +// ============================================================================= + +// Marks that the following headers are pulled in through the umbrella, so their +// shared guard () accepts them. +#define RN_UMBRELLA_CONTEXT + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef ANDROID +#include +#endif + +#undef RN_UMBRELLA_CONTEXT diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/Rect.h b/packages/react-native/ReactCommon/react/renderer/graphics/Rect.h index a9a4dcb9057c..9d38462812c5 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/Rect.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/Rect.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/RectangleCorners.h b/packages/react-native/ReactCommon/react/renderer/graphics/RectangleCorners.h index 00b3f9a109ef..d2804b6dc25a 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/RectangleCorners.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/RectangleCorners.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/RectangleEdges.h b/packages/react-native/ReactCommon/react/renderer/graphics/RectangleEdges.h index cccfcbd909a8..7d55d84d2d24 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/RectangleEdges.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/RectangleEdges.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/Size.h b/packages/react-native/ReactCommon/react/renderer/graphics/Size.h index bde0a19f0d27..2e2b80106553 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/Size.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/Size.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/Transform.h b/packages/react-native/ReactCommon/react/renderer/graphics/Transform.h index 2f3a69021426..708593867b88 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/Transform.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/Transform.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/TransformUtils.h b/packages/react-native/ReactCommon/react/renderer/graphics/TransformUtils.h index c12d264a0d36..887447278f3e 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/TransformUtils.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/TransformUtils.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/ValueUnit.h b/packages/react-native/ReactCommon/react/renderer/graphics/ValueUnit.h index ff654387062f..3ed9bc5b7a95 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/ValueUnit.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/ValueUnit.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/Vector.h b/packages/react-native/ReactCommon/react/renderer/graphics/Vector.h index 595856d59e8a..b76354d56355 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/Vector.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/Vector.h @@ -7,6 +7,8 @@ #pragma once +#include + #include namespace facebook::react { diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/fromRawValueShared.h b/packages/react-native/ReactCommon/react/renderer/graphics/fromRawValueShared.h index 7bd48ce15b46..5c0ff7ee8bf0 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/fromRawValueShared.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/fromRawValueShared.h @@ -15,6 +15,8 @@ #pragma once +#include + namespace facebook::react { using parsePlatformColorFn = SharedColor (*)(const ContextContainer &, int32_t, const RawValue &); diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/Float.h b/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/Float.h index ee0ee3e6a376..673b16a8d878 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/Float.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/Float.h @@ -7,6 +7,8 @@ #pragma once +#include + #include namespace facebook::react { diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/HostPlatformColor.h b/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/HostPlatformColor.h index bfbefc3832a3..94110d0704eb 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/HostPlatformColor.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/HostPlatformColor.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/PlatformColorParser.h b/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/PlatformColorParser.h index cf5a7c2ce1f1..4443871cac89 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/PlatformColorParser.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/PlatformColorParser.h @@ -7,6 +7,8 @@ #pragma once +#include + #include "configurePlatformColorCacheInvalidationHook.h" #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/configurePlatformColorCacheInvalidationHook.h b/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/configurePlatformColorCacheInvalidationHook.h index 0ae822a1f396..ac6c743ccb0f 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/configurePlatformColorCacheInvalidationHook.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/configurePlatformColorCacheInvalidationHook.h @@ -5,6 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +#include + #include namespace facebook::react { diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/Float.h b/packages/react-native/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/Float.h index ee0ee3e6a376..673b16a8d878 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/Float.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/Float.h @@ -7,6 +7,8 @@ #pragma once +#include + #include namespace facebook::react { diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/HostPlatformColor.h b/packages/react-native/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/HostPlatformColor.h index a13540363420..ea2d91867635 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/HostPlatformColor.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/HostPlatformColor.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/PlatformColorParser.h b/packages/react-native/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/PlatformColorParser.h index 3a0e863fda0d..84b81fec280a 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/PlatformColorParser.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/platform/cxx/react/renderer/graphics/PlatformColorParser.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/Float.h b/packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/Float.h index ef09235874e9..361abfda591e 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/Float.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/Float.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/HostPlatformColor.h b/packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/HostPlatformColor.h index a7dd98139991..80d61ff89d05 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/HostPlatformColor.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/HostPlatformColor.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/PlatformColorParser.h b/packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/PlatformColorParser.h index 3ff2aa38cfd5..28afc62d43f3 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/PlatformColorParser.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/PlatformColorParser.h @@ -7,6 +7,8 @@ #pragma once +#include + #include #include #include diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/RCTPlatformColorUtils.h b/packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/RCTPlatformColorUtils.h index ad021c1e413f..bfd96f122819 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/RCTPlatformColorUtils.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/RCTPlatformColorUtils.h @@ -7,6 +7,8 @@ #pragma once +#include + #import #import diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/rounding.h b/packages/react-native/ReactCommon/react/renderer/graphics/rounding.h index be34277849f6..b5f93f2891f5 100644 --- a/packages/react-native/ReactCommon/react/renderer/graphics/rounding.h +++ b/packages/react-native/ReactCommon/react/renderer/graphics/rounding.h @@ -7,6 +7,8 @@ #pragma once +#include + #include namespace facebook::react { diff --git a/packages/react-native/ReactCommon/react/renderer/graphics/tests/UmbrellaCompileTest.cpp b/packages/react-native/ReactCommon/react/renderer/graphics/tests/UmbrellaCompileTest.cpp new file mode 100644 index 000000000000..8598cec03347 --- /dev/null +++ b/packages/react-native/ReactCommon/react/renderer/graphics/tests/UmbrellaCompileTest.cpp @@ -0,0 +1,8 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#include diff --git a/packages/react-native/scripts/ios-prebuild/headers-config.js b/packages/react-native/scripts/ios-prebuild/headers-config.js index 2045b50ceae2..f908a13a6b49 100644 --- a/packages/react-native/scripts/ios-prebuild/headers-config.js +++ b/packages/react-native/scripts/ios-prebuild/headers-config.js @@ -504,6 +504,18 @@ const PodspecExceptions /*: {[key: string]: PodSpecConfiguration} */ = { }, ], }, + 'ReactCommon/react/renderer/graphics/React-graphics.podspec': { + name: 'React-graphics', + headerPatterns: ['*.h', 'platform/ios/**/*.h'], + headerDir: 'react/renderer/graphics', + subSpecs: [ + { + name: 'GraphicsUmbrella', + headerPatterns: ['React/*.h'], + headerDir: 'React', + }, + ], + }, 'React-Core.podspec': { name: 'React-Core', headerPatterns: [], From 422915d4717f8b4041d7f8cb0e998343c0addbb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Ma=C5=82ecki?= Date: Fri, 21 Aug 2026 03:31:27 -0700 Subject: [PATCH 4/4] Add stable public CallInvoker C++ entry point (#58049) Summary: Pull Request resolved: https://github.com/react/react-native/pull/58049 Add `` as the canonical public C++ entry point for `CallInvoker`, `NativeMethodCallInvoker`, and `SchedulerPriority`. Guard direct leaf-header inclusion for strict API consumers while preserving existing React Native builds and legacy include paths. Export and stage the umbrella consistently through Buck, CMake, Android Prefab, CocoaPods, and the Apple prebuilt-header inventory. SwiftPM needs no change, since its header mapping for this module already preserves the directory structure. The `ios-prebuild` header configuration needs an explicit entry here: the generic podspec parser only reads the first `header_dir`, so it would have flattened the umbrella into `ReactCommon/` and collided with the existing leaf header of the same basename. Changelog: [Internal] Differential Revision: D116921026 --- .../ReactAndroid/build.gradle.kts | 1 + .../ReactCommon/callinvoker/CMakeLists.txt | 1 + .../callinvoker/React-callinvoker.podspec | 16 +++++++++++ .../callinvoker/React/CallInvoker.h | 27 +++++++++++++++++++ .../callinvoker/ReactCommon/CallInvoker.h | 2 ++ .../ReactCommon/SchedulerPriority.h | 2 ++ .../scripts/ios-prebuild/headers-config.js | 13 +++++++++ 7 files changed, 62 insertions(+) create mode 100644 packages/react-native/ReactCommon/callinvoker/React/CallInvoker.h diff --git a/packages/react-native/ReactAndroid/build.gradle.kts b/packages/react-native/ReactAndroid/build.gradle.kts index e3ab24175429..94782d305a27 100644 --- a/packages/react-native/ReactAndroid/build.gradle.kts +++ b/packages/react-native/ReactAndroid/build.gradle.kts @@ -233,6 +233,7 @@ val preparePrefab by Pair(File(buildDir, "third-party-ndk/folly/").absolutePath, ""), Pair(File(buildDir, "third-party-ndk/glog/exported/").absolutePath, ""), Pair("../ReactCommon/callinvoker/", ""), + Pair("../ReactCommon/callinvoker/React/", "React/"), Pair("../ReactCommon/cxxreact/", "cxxreact/"), // Exported because the public cxxreact/ErrorUtils.h includes it Pair("../ReactCommon/jserrorhandler/", "jserrorhandler/"), diff --git a/packages/react-native/ReactCommon/callinvoker/CMakeLists.txt b/packages/react-native/ReactCommon/callinvoker/CMakeLists.txt index 5ad2b05c563a..9e03b804fdc7 100644 --- a/packages/react-native/ReactCommon/callinvoker/CMakeLists.txt +++ b/packages/react-native/ReactCommon/callinvoker/CMakeLists.txt @@ -11,5 +11,6 @@ include(${REACT_COMMON_DIR}/cmake-utils/react-native-flags.cmake) add_library(callinvoker INTERFACE) target_include_directories(callinvoker INTERFACE .) +target_link_libraries(callinvoker INTERFACE react_cxxstableapi) target_compile_reactnative_options(callinvoker INTERFACE) target_compile_options(callinvoker INTERFACE -Wpedantic) diff --git a/packages/react-native/ReactCommon/callinvoker/React-callinvoker.podspec b/packages/react-native/ReactCommon/callinvoker/React-callinvoker.podspec index 6290d9867e6d..aac5db20478e 100644 --- a/packages/react-native/ReactCommon/callinvoker/React-callinvoker.podspec +++ b/packages/react-native/ReactCommon/callinvoker/React-callinvoker.podspec @@ -16,6 +16,12 @@ else source[:tag] = "v#{version}" end +header_search_paths = [] + +if ENV['USE_FRAMEWORKS'] + header_search_paths << "\"$(PODS_TARGET_SRCROOT)/..\"" # ReactCommon, for +end + Pod::Spec.new do |s| s.name = "React-callinvoker" s.version = version @@ -26,7 +32,17 @@ Pod::Spec.new do |s| s.platforms = min_supported_versions s.source = source s.source_files = podspec_sources("**/*.{cpp,h}", "**/*.h") + s.exclude_files = "React" + s.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => header_search_paths.join(' ') } s.header_dir = "ReactCommon" + s.subspec "CallInvokerUmbrella" do |ss| + ss.source_files = "React/*.h" + ss.header_dir = "React" + ss.header_mappings_dir = "React" + end + + s.dependency "React-cxxstableapi" + mark_as_react_native_build(s) end diff --git a/packages/react-native/ReactCommon/callinvoker/React/CallInvoker.h b/packages/react-native/ReactCommon/callinvoker/React/CallInvoker.h new file mode 100644 index 000000000000..e8bf92e95dae --- /dev/null +++ b/packages/react-native/ReactCommon/callinvoker/React/CallInvoker.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +#pragma once + +// ============================================================================= +// Umbrella header for the `callinvoker` module - public entry point. +// +// #include +// +// Re-exports the module's public interface headers. React Native's own code +// should keep using the fine-grained `` includes; only outside +// consumers use this umbrella. +// ============================================================================= + +// Marks that the following headers are pulled in through the umbrella, so their +// shared guard () accepts them. +#define RN_UMBRELLA_CONTEXT + +#include +#include + +#undef RN_UMBRELLA_CONTEXT diff --git a/packages/react-native/ReactCommon/callinvoker/ReactCommon/CallInvoker.h b/packages/react-native/ReactCommon/callinvoker/ReactCommon/CallInvoker.h index 452493c27e3e..1c6fc0302dc9 100644 --- a/packages/react-native/ReactCommon/callinvoker/ReactCommon/CallInvoker.h +++ b/packages/react-native/ReactCommon/callinvoker/ReactCommon/CallInvoker.h @@ -7,6 +7,8 @@ #pragma once +#include + #include "SchedulerPriority.h" #include diff --git a/packages/react-native/ReactCommon/callinvoker/ReactCommon/SchedulerPriority.h b/packages/react-native/ReactCommon/callinvoker/ReactCommon/SchedulerPriority.h index 2027d95c7668..44b8dcc973bb 100644 --- a/packages/react-native/ReactCommon/callinvoker/ReactCommon/SchedulerPriority.h +++ b/packages/react-native/ReactCommon/callinvoker/ReactCommon/SchedulerPriority.h @@ -7,6 +7,8 @@ #pragma once +#include + namespace facebook::react { enum class SchedulerPriority : int { diff --git a/packages/react-native/scripts/ios-prebuild/headers-config.js b/packages/react-native/scripts/ios-prebuild/headers-config.js index f908a13a6b49..93efac73e57e 100644 --- a/packages/react-native/scripts/ios-prebuild/headers-config.js +++ b/packages/react-native/scripts/ios-prebuild/headers-config.js @@ -504,6 +504,19 @@ const PodspecExceptions /*: {[key: string]: PodSpecConfiguration} */ = { }, ], }, + 'ReactCommon/callinvoker/React-callinvoker.podspec': { + name: 'React-callinvoker', + headerPatterns: ['**/*.h'], + excludePatterns: ['React/**'], + headerDir: 'ReactCommon', + subSpecs: [ + { + name: 'CallInvokerUmbrella', + headerPatterns: ['React/*.h'], + headerDir: 'React', + }, + ], + }, 'ReactCommon/react/renderer/graphics/React-graphics.podspec': { name: 'React-graphics', headerPatterns: ['*.h', 'platform/ios/**/*.h'],