Skip to content

Commit

Permalink
Update iOS Fabric-related files to compile on OSS (#29810)
Browse files Browse the repository at this point in the history
Summary:
Original PR contents:

This pull request updates the Podspecs and associated build scripts, and some source files so they build on OSS. RNTester now compiles with `fabric_enabled` again.

The following changes have been made:

 * Various spots that were pointing to the old `ReactCommon/fabric` location have now been updated to `ReactCommon/react/renderer`
 * Files that were attempting to use internal FB header `FBRCTFabricComponentsPlugins.h` were changed to use `RCTFabricComponentsPlugins.h`
 * `RCTFabricComponentsPlugins` in OSS was updated to include the `Image` fabric component (thanks tsapeta)
 * Replaced old `generate-rncore.sh` build script with new `generate-rncore.js` script which does not require `flow-node` and uses the `react-native-codegen` API directly, so there is no longer any need for an interim `schema-rncore.json` file.
 * Updated Yoga podspec which wasn't fully synced with changes from the main Yoga repo
 * Updated Fabric podspec with additional needed subspecs

Additions to PR by hramos:
* Replaced use of generate-rncore scripts with the original generate-native-modules-specs.sh script, which is now generate-specs.sh and supports both codegen for Native Modules and Components now (TurboModules/Fabric).
* Codegen now runs at build time as part of the Xcode build pipeline instead of as part of `pod install`. The build script is injected by the FBReactNativeSpec pod, as the pod is part of both Fabric and non-Fabric builds.

[General] [Fixed] - RNTester compiles with `fabric_enabled` again

Pull Request resolved: #29810

Test Plan:
RNTester now compiles and runs in the simulator again when `fabric_enabled` is set to `true`.

```
cd xplat/js/react-native-github/packages/rn-tester
USE_FABRIC=1 pod install
open RNTesterPods.xcworkspace
```

Reviewed By: fkgozali

Differential Revision: D24058507

Pulled By: hramos

fbshipit-source-id: 8b2ea3694e6cb9aa23f83f087e2995fd4320e2bb
  • Loading branch information
empyrical authored and grabbou committed Feb 1, 2021
1 parent 7ec38b9 commit 224c85a
Show file tree
Hide file tree
Showing 23 changed files with 209 additions and 148 deletions.
3 changes: 1 addition & 2 deletions .gitignore
Expand Up @@ -102,8 +102,7 @@ package-lock.json
# react-native-codegen
/Libraries/FBReactNativeSpec/FBReactNativeSpec
/packages/react-native-codegen/lib
/ReactCommon/fabric/components/rncore/
/schema-rncore.json
/ReactCommon/react/renderer/components/rncore/

# Visual studio
.vscode
Expand Down
29 changes: 23 additions & 6 deletions Libraries/FBReactNativeSpec/FBReactNativeSpec.podspec
Expand Up @@ -20,11 +20,27 @@ end

react_native_path = File.join(__dir__, "..", "..")
srcs_dir = File.join(__dir__, "..")
codegen_script_path = File.join(react_native_path, "scripts", "generate-native-modules-specs.sh")
codegen_script_path = File.join(react_native_path, "scripts", "generate-specs.sh")
codegen_path = File.join(react_native_path, codegen_path_prefix, "react-native-codegen")
output_dir = File.join(__dir__, "FBReactNativeSpec")
generated_files = [File.join(output_dir, "FBReactNativeSpec.h"), File.join(output_dir, "FBReactNativeSpec-generated.mm")]
codegen_command = "CODEGEN_PATH=#{codegen_path} sh '#{codegen_script_path}' | tee \"${SCRIPT_OUTPUT_FILE_0}\""
modules_output_dir = File.join(__dir__, "FBReactNativeSpec")
components_output_dir = File.join(react_native_path, "ReactCommon", "react", "renderer", "components", "rncore")
generated_filenames = [ "FBReactNativeSpec.h", "FBReactNativeSpec-generated.mm" ]
generated_files = generated_filenames.map { |filename| File.join(modules_output_dir, filename) }

if ENV['USE_FABRIC'] == '1'
components_generated_filenames = [
"ComponentDescriptors.h",
"EventEmitters.cpp",
"EventEmitters.h",
"Props.cpp",
"Props.h",
"RCTComponentViewHelpers.h",
"ShadowNodes.cpp",
"ShadowNodes.h"
]
generated_files = generated_files.concat(components_generated_filenames.map { |filename| File.join(components_output_dir, filename) })
end

folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
folly_version = '2020.01.13.00'
Expand All @@ -40,6 +56,7 @@ Pod::Spec.new do |s|
s.compiler_flags = folly_compiler_flags + ' -Wno-nullability-completeness'
s.source = source
s.source_files = "**/*.{c,h,m,mm,cpp}"
s.exclude_files = "jni"
s.header_dir = "FBReactNativeSpec"

s.pod_target_xcconfig = {
Expand All @@ -55,11 +72,11 @@ Pod::Spec.new do |s|
s.dependency "React-jsi", version
s.dependency "ReactCommon/turbomodule/core", version

s.prepare_command = "mkdir -p #{output_dir} && touch #{generated_files.reduce() { |str, file| str + " " + file }}"
s.prepare_command = "mkdir -p #{modules_output_dir} #{components_output_dir} && touch #{generated_files.reduce() { |str, file| str + " " + file }}"
s.script_phase = {
:name => 'Generate Native Modules Code',
:name => 'Generate Specs',
:input_files => [srcs_dir],
:output_files => ["$(DERIVED_FILE_DIR)/FBReactNativeSpec-codegen.log"],
:output_files => ["$(DERIVED_FILE_DIR)/codegen.log"],
:script => codegen_command,
:execution_position => :before_compile
}
Expand Down
Expand Up @@ -13,7 +13,7 @@
#import <react/renderer/components/rncore/EventEmitters.h>
#import <react/renderer/components/rncore/Props.h>

#import "FBRCTFabricComponentsPlugins.h"
#import "RCTFabricComponentsPlugins.h"

using namespace facebook::react;

Expand Down
Expand Up @@ -15,8 +15,8 @@
#import <react/renderer/components/iospicker/PickerProps.h>
#import <react/renderer/textlayoutmanager/RCTAttributedTextUtils.h>

#import "FBRCTFabricComponentsPlugins.h"
#import "RCTConversions.h"
#import "RCTFabricComponentsPlugins.h"

using namespace facebook::react;

Expand Down
Expand Up @@ -41,6 +41,7 @@ Class<RCTComponentViewProtocol> RCTParagraphCls(void) __attribute__((used));
Class<RCTComponentViewProtocol> RCTTextInputCls(void) __attribute__((used));
Class<RCTComponentViewProtocol> RCTInputAccessoryCls(void) __attribute__((used));
Class<RCTComponentViewProtocol> RCTViewCls(void) __attribute__((used));
Class<RCTComponentViewProtocol> RCTImageCls(void) __attribute__((used));

#ifdef __cplusplus
}
Expand Down
Expand Up @@ -30,6 +30,7 @@
{"TextInput", RCTTextInputCls},
{"InputAccessoryView", RCTInputAccessoryCls},
{"View", RCTViewCls},
{"Image", RCTImageCls},
};

auto p = sFabricComponentsClassMap.find(name);
Expand Down
Expand Up @@ -10,7 +10,6 @@
#import <React/RCTUtils.h>
#import <react/renderer/components/safeareaview/SafeAreaViewComponentDescriptor.h>
#import <react/renderer/components/safeareaview/SafeAreaViewState.h>
#import "FBRCTFabricComponentsPlugins.h"
#import "RCTConversions.h"
#import "RCTFabricComponentsPlugins.h"

Expand Down
Expand Up @@ -16,7 +16,7 @@
#import <React/RCTRefreshableProtocol.h>
#import <React/RCTScrollViewComponentView.h>

#import "FBRCTFabricComponentsPlugins.h"
#import "RCTFabricComponentsPlugins.h"

using namespace facebook::react;

Expand Down
Expand Up @@ -15,7 +15,7 @@
#import <react/renderer/components/rncore/Props.h>
#import <react/renderer/components/slider/SliderComponentDescriptor.h>

#import "FBRCTFabricComponentsPlugins.h"
#import "RCTFabricComponentsPlugins.h"

using namespace facebook::react;

Expand Down
Expand Up @@ -14,7 +14,7 @@
#import <react/renderer/components/rncore/Props.h>
#import <react/renderer/components/rncore/RCTComponentViewHelpers.h>

#import "FBRCTFabricComponentsPlugins.h"
#import "RCTFabricComponentsPlugins.h"

using namespace facebook::react;

Expand Down
Expand Up @@ -16,7 +16,7 @@

#import <React/RCTConversions.h>

#import "FBRCTFabricComponentsPlugins.h"
#import "RCTFabricComponentsPlugins.h"

using namespace facebook::react;

Expand Down
10 changes: 7 additions & 3 deletions React/React-RCTFabric.podspec
Expand Up @@ -30,8 +30,7 @@ Pod::Spec.new do |s|
s.author = "Facebook, Inc. and its affiliates"
s.platforms = { :ios => "10.0" }
s.source = source
s.source_files = "Fabric/**/*.{c,h,m,mm,S,cpp}",
"Tests/**/*.{mm}"
s.source_files = "Fabric/**/*.{c,h,m,mm,S,cpp}"
s.exclude_files = "**/tests/*",
"**/android/*",
s.compiler_flags = folly_compiler_flags + ' ' + boost_compiler_flags
Expand All @@ -45,5 +44,10 @@ Pod::Spec.new do |s|
s.dependency "React-Core", version
s.dependency "React-Fabric", version
s.dependency "React-RCTImage", version
s.dependency "Folly/Fabric", folly_version
s.dependency "RCT-Folly/Fabric", folly_version

s.test_spec 'Tests' do |test_spec|
test_spec.source_files = "Tests/**/*.{mm}"
test_spec.framework = "XCTest"
end
end

0 comments on commit 224c85a

Please sign in to comment.