From 71ee246183a97b49ce59117b68dc0bad4b5b51eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Norte?= Date: Thu, 22 Feb 2024 08:39:12 -0800 Subject: [PATCH] Include native module for ReactNativeFeatureFlags by default in all apps using TurboModules (#42431) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/42431 Changelog: [internal] Reviewed By: dmytrorykun Differential Revision: D52905704 fbshipit-source-id: df1a0ec71ba468d8352f2af92bf87b5175c0d72c --- .../ReactAndroid/src/main/jni/CMakeLists.txt | 1 + .../jni/react/newarchdefaults/CMakeLists.txt | 1 + .../DefaultTurboModuleManagerDelegate.cpp | 11 +++++++- .../nativemodule/featureflags/CMakeLists.txt | 25 +++++++++++++++++++ .../NativeReactNativeFeatureFlags.cpp | 4 ++- .../NativeReactNativeFeatureFlags.h | 6 ++++- ...iveReactNativeFeatureFlags.cpp-template.js | 2 ++ ...ativeReactNativeFeatureFlags.h-template.js | 4 +++ 8 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 packages/react-native/ReactCommon/react/nativemodule/featureflags/CMakeLists.txt diff --git a/packages/react-native/ReactAndroid/src/main/jni/CMakeLists.txt b/packages/react-native/ReactAndroid/src/main/jni/CMakeLists.txt index 0fe09d67baa..8e30da2cda6 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/CMakeLists.txt +++ b/packages/react-native/ReactAndroid/src/main/jni/CMakeLists.txt @@ -101,6 +101,7 @@ add_react_common_subdir(react/utils) add_react_common_subdir(react/bridging) add_react_common_subdir(react/renderer/mapbuffer) add_react_common_subdir(react/nativemodule/core) +add_react_common_subdir(react/nativemodule/featureflags) add_react_common_subdir(jserrorhandler) add_react_common_subdir(react/runtime) add_react_common_subdir(react/runtime/hermes) diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/newarchdefaults/CMakeLists.txt b/packages/react-native/ReactAndroid/src/main/jni/react/newarchdefaults/CMakeLists.txt index 3bbdeebb050..8ecdfadb9b4 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/newarchdefaults/CMakeLists.txt +++ b/packages/react-native/ReactAndroid/src/main/jni/react/newarchdefaults/CMakeLists.txt @@ -21,4 +21,5 @@ target_link_libraries(react_newarchdefaults react_nativemodule_core react_codegen_rncore react_cxxreactpackage + react_nativemodule_featureflags jsi) diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/newarchdefaults/DefaultTurboModuleManagerDelegate.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/newarchdefaults/DefaultTurboModuleManagerDelegate.cpp index e202896abc7..ce5c07bf97d 100644 --- a/packages/react-native/ReactAndroid/src/main/jni/react/newarchdefaults/DefaultTurboModuleManagerDelegate.cpp +++ b/packages/react-native/ReactAndroid/src/main/jni/react/newarchdefaults/DefaultTurboModuleManagerDelegate.cpp @@ -9,6 +9,7 @@ #include +#include #include namespace facebook::react { @@ -67,8 +68,16 @@ std::shared_ptr DefaultTurboModuleManagerDelegate::getTurboModule( auto moduleProvider = DefaultTurboModuleManagerDelegate::cxxModuleProvider; if (moduleProvider) { - return moduleProvider(name, jsInvoker); + auto module = moduleProvider(name, jsInvoker); + if (module) { + return module; + } } + + if (name == NativeReactNativeFeatureFlags::kModuleName) { + return std::make_shared(jsInvoker); + } + return nullptr; } diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/CMakeLists.txt b/packages/react-native/ReactCommon/react/nativemodule/featureflags/CMakeLists.txt new file mode 100644 index 00000000000..65c0bd433a5 --- /dev/null +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/CMakeLists.txt @@ -0,0 +1,25 @@ +# 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. + +cmake_minimum_required(VERSION 3.13) +set(CMAKE_VERBOSE_MAKEFILE on) + +add_compile_options( + -fexceptions + -frtti + -std=c++20 + -Wall + -Wpedantic + -DLOG_TAG=\"ReactNative\") + +file(GLOB react_nativemodule_featureflags_SRC CONFIGURE_DEPENDS *.cpp) +add_library(react_nativemodule_featureflags SHARED ${react_nativemodule_featureflags_SRC}) + +target_include_directories(react_nativemodule_featureflags PUBLIC ${REACT_COMMON_DIR}) + +target_link_libraries(react_nativemodule_featureflags + react_featureflags + react_codegen_rncore + reactnative) diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp index 67f799f556c..47dc35f1f8b 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<2466af777a1d69da2c3810e5a2d53a70>> + * @generated SignedSource<<003a5e1b1e52d504e9cd29583b475041>> */ /** @@ -20,7 +20,9 @@ #include "NativeReactNativeFeatureFlags.h" #include +#ifdef RN_DISABLE_OSS_PLUGIN_HEADER #include "Plugins.h" +#endif std::shared_ptr NativeReactNativeFeatureFlagsModuleProvider( diff --git a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h index 203dfce52c0..dac5ad3f417 100644 --- a/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +++ b/packages/react-native/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h @@ -4,7 +4,7 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * - * @generated SignedSource<<30481dc57cc7f389d1ed87d097caedda>> + * @generated SignedSource<> */ /** @@ -19,7 +19,11 @@ #pragma once +#if __has_include("rncoreJSI.h") // Cmake headers on Android +#include "rncoreJSI.h" +#else #include +#endif namespace facebook::react { diff --git a/packages/react-native/scripts/featureflags/templates/js/NativeReactNativeFeatureFlags.cpp-template.js b/packages/react-native/scripts/featureflags/templates/js/NativeReactNativeFeatureFlags.cpp-template.js index 13a28a72cec..74be22c0dc4 100644 --- a/packages/react-native/scripts/featureflags/templates/js/NativeReactNativeFeatureFlags.cpp-template.js +++ b/packages/react-native/scripts/featureflags/templates/js/NativeReactNativeFeatureFlags.cpp-template.js @@ -28,7 +28,9 @@ ${DO_NOT_MODIFY_COMMENT} #include "NativeReactNativeFeatureFlags.h" #include +#ifdef RN_DISABLE_OSS_PLUGIN_HEADER #include "Plugins.h" +#endif std::shared_ptr NativeReactNativeFeatureFlagsModuleProvider( diff --git a/packages/react-native/scripts/featureflags/templates/js/NativeReactNativeFeatureFlags.h-template.js b/packages/react-native/scripts/featureflags/templates/js/NativeReactNativeFeatureFlags.h-template.js index 492639ed9d3..06d30348cd3 100644 --- a/packages/react-native/scripts/featureflags/templates/js/NativeReactNativeFeatureFlags.h-template.js +++ b/packages/react-native/scripts/featureflags/templates/js/NativeReactNativeFeatureFlags.h-template.js @@ -27,7 +27,11 @@ ${DO_NOT_MODIFY_COMMENT} #pragma once +#if __has_include("rncoreJSI.h") // Cmake headers on Android +#include "rncoreJSI.h" +#else #include +#endif namespace facebook::react {