mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
a68c418082
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/35038 React-jsi provides JSI to allow React Native to interface with JavaScriptCore. The hermes-engine Pod provides a second copy of JSI, as Hermes is built and linked statically with JSI. This second copy of JSI would lead to an [ODR Violation](https://en.cppreference.com/w/cpp/language/definition). To resolve this, when Hermes is enabled: - React-hermes and hermes-engine are installed. - React-jsc is not installed. - React-jsi continues to be installed. - React-jsi will not build JSI. - React-jsi will declare a dependency on hermes-engine. The result is that the JSI dependency for React Native is satisfied by hermes-engine, and there is no duplicate JSI library in the project. When Hermes is disabled: - React-jsi and React-jsc are installed. - React-hermes and hermes-engine are not installed. - React-jsi will build JSI. Changelog: [iOS][Changed] Resolve JSI ODR violation, make hermes-engine the JSI provider when Hermes is enabled Reviewed By: cipolleschi Differential Revision: D40334913 fbshipit-source-id: 409407a193a35cbd21b0e8778537b3627e4c54a2
37 lines
1.6 KiB
Ruby
37 lines
1.6 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_relative './utils.rb'
|
|
|
|
# It sets up the JavaScriptCore and JSI pods.
|
|
#
|
|
# @parameter react_native_path: relative path to react-native
|
|
# @parameter fabric_enabled: whether Fabirc is enabled
|
|
def setup_jsc!(react_native_path: "../node_modules/react-native", fabric_enabled: false)
|
|
pod 'React-jsi', :path => "#{react_native_path}/ReactCommon/jsi"
|
|
pod 'React-jsc', :path => "#{react_native_path}/ReactCommon/jsi"
|
|
if fabric_enabled
|
|
pod 'React-jsc/Fabric', :path => "#{react_native_path}/ReactCommon/jsi"
|
|
end
|
|
end
|
|
|
|
# It sets up the Hermes and JSI pods.
|
|
#
|
|
# @parameter react_native_path: relative path to react-native
|
|
# @parameter fabric_enabled: whether Fabirc is enabled
|
|
def setup_hermes!(react_native_path: "../node_modules/react-native", fabric_enabled: false)
|
|
# The following captures the output of prepare_hermes for use in tests
|
|
prepare_hermes = 'node scripts/hermes/prepare-hermes-for-build'
|
|
react_native_dir = Pod::Config.instance.installation_root.join(react_native_path)
|
|
prep_output, prep_status = Open3.capture2e(prepare_hermes, :chdir => react_native_dir)
|
|
prep_output.split("\n").each { |line| Pod::UI.info line }
|
|
abort unless prep_status == 0
|
|
|
|
pod 'React-jsi', :path => "#{react_native_path}/ReactCommon/jsi"
|
|
pod 'hermes-engine', :podspec => "#{react_native_path}/sdks/hermes/hermes-engine.podspec"
|
|
pod 'React-hermes', :path => "#{react_native_path}/ReactCommon/hermes"
|
|
pod 'libevent', '~> 2.1.12'
|
|
end
|