mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
b3040ec624
Summary: I discovered that 0.69 could run React Native as Dynamic framework with Hermes and starting from 0.70 that's not possible anymore. This diff restore that possibility. Notice that now Hermes provisdes JSI and Dynamic Frameworks requires that all the dependencies are explicitly defined, therefore, whenever we have a pod that depended on `React-jsi`, now it also has to explicitly depends on `hermes-engine` ## Changelog [iOS][Fixed] - Add Back dynamic framework support for the Old Architecture with Hermes Reviewed By: cortinico Differential Revision: D42829728 fbshipit-source-id: a660e3b1e346ec6cf3ceb8771dd8bceb0dbcb13a
133 lines
5.1 KiB
Ruby
133 lines
5.1 KiB
Ruby
# 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.
|
||
|
||
require "json"
|
||
|
||
package = JSON.parse(File.read(File.join(__dir__, "package.json")))
|
||
version = package['version']
|
||
|
||
source = { :git => 'https://github.com/facebook/react-native.git' }
|
||
if version == '1000.0.0'
|
||
# This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
|
||
source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
|
||
else
|
||
source[:tag] = "v#{version}"
|
||
end
|
||
|
||
folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
|
||
folly_version = '2021.07.22.00'
|
||
boost_compiler_flags = '-Wno-documentation'
|
||
|
||
use_hermes = ENV['USE_HERMES'] == '1'
|
||
|
||
header_subspecs = {
|
||
'CoreModulesHeaders' => 'React/CoreModules/**/*.h',
|
||
'RCTActionSheetHeaders' => 'Libraries/ActionSheetIOS/*.h',
|
||
'RCTAnimationHeaders' => 'Libraries/NativeAnimation/{Drivers/*,Nodes/*,*}.{h}',
|
||
'RCTBlobHeaders' => 'Libraries/Blob/{RCTBlobManager,RCTFileReaderModule}.h',
|
||
'RCTImageHeaders' => 'Libraries/Image/*.h',
|
||
'RCTLinkingHeaders' => 'Libraries/LinkingIOS/*.h',
|
||
'RCTNetworkHeaders' => 'Libraries/Network/*.h',
|
||
'RCTPushNotificationHeaders' => 'Libraries/PushNotificationIOS/*.h',
|
||
'RCTSettingsHeaders' => 'Libraries/Settings/*.h',
|
||
'RCTTextHeaders' => 'Libraries/Text/**/*.h',
|
||
'RCTVibrationHeaders' => 'Libraries/Vibration/*.h',
|
||
}
|
||
|
||
header_search_paths = [
|
||
"$(PODS_TARGET_SRCROOT)/ReactCommon",
|
||
"$(PODS_ROOT)/boost",
|
||
"$(PODS_ROOT)/DoubleConversion",
|
||
"$(PODS_ROOT)/RCT-Folly",
|
||
"${PODS_ROOT}/Headers/Public/FlipperKit",
|
||
"$(PODS_ROOT)/Headers/Public/ReactCommon",
|
||
"$(PODS_ROOT)/Headers/Public/React-RCTFabric"
|
||
].concat(use_hermes ? [
|
||
"$(PODS_ROOT)/Headers/Public/React-hermes",
|
||
"$(PODS_ROOT)/Headers/Public/hermes-engine"
|
||
] : []).map{|p| "\"#{p}\""}.join(" ")
|
||
|
||
Pod::Spec.new do |s|
|
||
s.name = "React-Core"
|
||
s.version = version
|
||
s.summary = "The core of React Native."
|
||
s.homepage = "https://reactnative.dev/"
|
||
s.license = package["license"]
|
||
s.author = "Meta Platforms, Inc. and its affiliates"
|
||
s.platforms = { :ios => "12.4" }
|
||
s.source = source
|
||
s.resource_bundle = { "AccessibilityResources" => ["React/AccessibilityResources/*.lproj"]}
|
||
s.compiler_flags = folly_compiler_flags + ' ' + boost_compiler_flags
|
||
s.header_dir = "React"
|
||
s.framework = "JavaScriptCore"
|
||
s.pod_target_xcconfig = {
|
||
"HEADER_SEARCH_PATHS" => header_search_paths,
|
||
"DEFINES_MODULE" => "YES",
|
||
"GCC_PREPROCESSOR_DEFINITIONS" => "RCT_METRO_PORT=${RCT_METRO_PORT}",
|
||
"CLANG_CXX_LANGUAGE_STANDARD" => "c++17",
|
||
}.merge!(use_hermes ? {
|
||
"FRAMEWORK_SEARCH_PATHS" => "\"$(PODS_CONFIGURATION_BUILD_DIR)/React-hermes\""
|
||
} : {})
|
||
s.user_target_xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/Headers/Private/React-Core\""}
|
||
s.default_subspec = "Default"
|
||
|
||
s.subspec "Default" do |ss|
|
||
ss.source_files = "React/**/*.{c,h,m,mm,S,cpp}"
|
||
exclude_files = [
|
||
"React/CoreModules/**/*",
|
||
"React/DevSupport/**/*",
|
||
"React/Fabric/**/*",
|
||
"React/FBReactNativeSpec/**/*",
|
||
"React/Tests/**/*",
|
||
"React/Inspector/**/*"
|
||
]
|
||
# If we are using Hermes (the default is use hermes, so USE_HERMES can be nil), we don't have jsc installed
|
||
# So we have to exclude the JSCExecutorFactory
|
||
if ENV['USE_HERMES'] == nil || ENV['USE_HERMES'] == "1"
|
||
exclude_files = exclude_files.append("React/CxxBridge/JSCExecutorFactory.{h,mm}")
|
||
end
|
||
ss.exclude_files = exclude_files
|
||
ss.private_header_files = "React/Cxx*/*.h"
|
||
end
|
||
|
||
s.subspec "DevSupport" do |ss|
|
||
ss.source_files = "React/DevSupport/*.{h,mm,m}",
|
||
"React/Inspector/*.{h,mm,m}"
|
||
|
||
ss.dependency "React-Core/Default", version
|
||
ss.dependency "React-Core/RCTWebSocket", version
|
||
ss.dependency "React-jsinspector", version
|
||
end
|
||
|
||
s.subspec "RCTWebSocket" do |ss|
|
||
ss.source_files = "Libraries/WebSocket/*.{h,m}"
|
||
ss.dependency "React-Core/Default", version
|
||
end
|
||
|
||
# Add a subspec containing just the headers for each
|
||
# pod that should live under <React/*.h>
|
||
header_subspecs.each do |name, headers|
|
||
s.subspec name do |ss|
|
||
ss.source_files = headers
|
||
ss.dependency "React-Core/Default"
|
||
end
|
||
end
|
||
|
||
s.dependency "RCT-Folly", folly_version
|
||
s.dependency "React-cxxreact", version
|
||
s.dependency "React-perflogger", version
|
||
s.dependency "React-jsi", version
|
||
s.dependency "React-jsiexecutor", version
|
||
s.dependency "Yoga"
|
||
s.dependency "glog"
|
||
|
||
if ENV['USE_HERMES'] == "0"
|
||
s.dependency 'React-jsc'
|
||
else
|
||
s.dependency 'React-hermes'
|
||
s.dependency 'hermes-engine'
|
||
end
|
||
end
|