From 0959ff36d1f3264e117021eb1999d0bdb71377c3 Mon Sep 17 00:00:00 2001 From: Janic Duplessis Date: Thu, 3 Dec 2020 20:05:00 -0800 Subject: [PATCH] Move hermes to a separate podspec (#30478) Summary: Hermes being a subspec of ReactCore causes some build issues when RN is included in 2 different targets. It also causes it to include a lot of additional dependencies that it doesn't need. This moves it to a separate podspec loosely based on other specs in ReactCommon. ## Changelog [iOS] [Fixed] - Move hermes to a separate podspec Pull Request resolved: https://github.com/facebook/react-native/pull/30478 Test Plan: Test that it builds and run properly in an app Reviewed By: fkgozali Differential Revision: D25308237 Pulled By: hramos fbshipit-source-id: b4cc44ea2b1b854831e881dbbf9a2f30f6704001 --- React-Core.podspec | 11 ----- React/CxxBridge/RCTCxxBridge.mm | 2 +- ReactCommon/hermes/React-hermes.podspec | 53 ++++++++++++++++++++++ packages/rn-tester/RNTester/AppDelegate.mm | 2 +- scripts/react_native_pods.rb | 2 +- 5 files changed, 56 insertions(+), 14 deletions(-) create mode 100644 ReactCommon/hermes/React-hermes.podspec diff --git a/React-Core.podspec b/React-Core.podspec index 9a2be90c4bc145..07f0ec398b3536 100644 --- a/React-Core.podspec +++ b/React-Core.podspec @@ -62,17 +62,6 @@ Pod::Spec.new do |s| ss.private_header_files = "React/Cxx*/*.h" end - s.subspec "Hermes" do |ss| - ss.platforms = { :osx => "10.14", :ios => "10.0" } - ss.source_files = "ReactCommon/hermes/executor/*.{cpp,h}", - "ReactCommon/hermes/inspector/*.{cpp,h}", - "ReactCommon/hermes/inspector/chrome/*.{cpp,h}", - "ReactCommon/hermes/inspector/detail/*.{cpp,h}" - ss.pod_target_xcconfig = { "GCC_PREPROCESSOR_DEFINITIONS" => "HERMES_ENABLE_DEBUGGER=1" } - ss.dependency "RCT-Folly/Futures" - ss.dependency "hermes-engine" - end - s.subspec "DevSupport" do |ss| ss.source_files = "React/DevSupport/*.{h,mm,m}", "React/Inspector/*.{h,mm,m}" diff --git a/React/CxxBridge/RCTCxxBridge.mm b/React/CxxBridge/RCTCxxBridge.mm index 23222509610882..5836cf02221b6e 100644 --- a/React/CxxBridge/RCTCxxBridge.mm +++ b/React/CxxBridge/RCTCxxBridge.mm @@ -46,7 +46,7 @@ #endif #if RCT_USE_HERMES -#import "HermesExecutorFactory.h" +#import #else #import "JSCExecutorFactory.h" #endif diff --git a/ReactCommon/hermes/React-hermes.podspec b/ReactCommon/hermes/React-hermes.podspec new file mode 100644 index 00000000000000..d28d3018f13e21 --- /dev/null +++ b/ReactCommon/hermes/React-hermes.podspec @@ -0,0 +1,53 @@ +# Copyright (c) Facebook, Inc. and its 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 +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 = '2020.01.13.00' +boost_compiler_flags = '-Wno-documentation' + +Pod::Spec.new do |s| + s.name = "React-hermes" + s.version = version + s.summary = "-" # TODO + s.homepage = "https://reactnative.dev/" + s.license = package["license"] + s.author = "Facebook, Inc. and its affiliates" + s.platforms = { :osx => "10.14", :ios => "10.0" } + s.source = source + s.source_files = "executor/*.{cpp,h}", + "inspector/*.{cpp,h}", + "inspector/chrome/*.{cpp,h}", + "inspector/detail/*.{cpp,h}" + s.public_header_files = "executor/HermesExecutorFactory.h" + s.compiler_flags = folly_compiler_flags + ' ' + boost_compiler_flags + s.pod_target_xcconfig = { + "HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/..\" \"$(PODS_ROOT)/boost-for-react-native\" \"$(PODS_ROOT)/RCT-Folly\" \"$(PODS_ROOT)/DoubleConversion\"", + "GCC_PREPROCESSOR_DEFINITIONS" => "HERMES_ENABLE_DEBUGGER=1", + } + s.header_dir = "reacthermes" + s.dependency "React-cxxreact", version + s.dependency "React-jsi", version + s.dependency "React-jsiexecutor", version + s.dependency "React-jsinspector", version + s.dependency "React-perflogger", version + s.dependency "RCT-Folly", folly_version + s.dependency "RCT-Folly/Futures", folly_version + s.dependency "DoubleConversion" + s.dependency "glog" + s.dependency "hermes-engine" +end diff --git a/packages/rn-tester/RNTester/AppDelegate.mm b/packages/rn-tester/RNTester/AppDelegate.mm index 4ce922259a5444..012c26dd9e6cf6 100644 --- a/packages/rn-tester/RNTester/AppDelegate.mm +++ b/packages/rn-tester/RNTester/AppDelegate.mm @@ -16,7 +16,7 @@ #endif #if RCT_USE_HERMES -#import +#import #else #import #endif diff --git a/scripts/react_native_pods.rb b/scripts/react_native_pods.rb index a77938c0510588..480df56be4d5c5 100644 --- a/scripts/react_native_pods.rb +++ b/scripts/react_native_pods.rb @@ -62,7 +62,7 @@ def use_react_native! (options={}) end if hermes_enabled - pod 'React-Core/Hermes', :path => "#{prefix}/" + pod 'React-hermes', :path => "#{prefix}/ReactCommon/hermes" pod 'hermes-engine' pod 'libevent', :podspec => "#{prefix}/third-party-podspecs/libevent.podspec" end