Skip to content

Commit a5c7711

Browse files
dmytrorykunfacebook-github-bot
authored andcommitted
Build hermesc in Xcode run script phase
Summary: Build hermesc in Xcode run script phase, so it ends up inside `Pods/hermes-engine/buld_host_hermesc`. All the the housekeeping is now done by CocoaPods and Xcode, and we can get rid of all the setup/cleanup code. Changelog: [iOS][Changed] - Build hermesc in Xcode run script phase. Reviewed By: cipolleschi Differential Revision: D41521987 fbshipit-source-id: 336854fa23582255cba6d161acf2cc791cac9d00
1 parent 09843a0 commit a5c7711

File tree

6 files changed

+27
-22
lines changed

6 files changed

+27
-22
lines changed

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,6 @@ package-lock.json
125125
/sdks/download
126126
/sdks/hermes
127127
/sdks/hermesc
128-
/sdks/hermes-engine/build_host_hermesc
129128

130129
# Visual studio
131130
.vscode

packages/rn-tester/Podfile.lock

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -954,7 +954,7 @@ SPEC CHECKSUMS:
954954
FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86
955955
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
956956
glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
957-
hermes-engine: d18f5a58d912c767ed56b58821bddd685d766712
957+
hermes-engine: e49758848596771dbb97c8f1b65e9d1ac353af69
958958
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
959959
OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c
960960
RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1
@@ -965,14 +965,14 @@ SPEC CHECKSUMS:
965965
React-Codegen: 4f1e911c128928e425e11698ad7859dfd0f92e20
966966
React-Core: 719bec4b41c93b1affb1e2c3a43956ec482ecb9f
967967
React-CoreModules: feaa45c54c58e1420981f6dd544c8b3d01200caa
968-
React-cxxreact: c5f93e7a35f3545489d8e1f89beb9d2d56acfde5
968+
React-cxxreact: 97903bdac0fb53409663fd312e2183ae1dd730e5
969969
React-Fabric: 8a854fd89c932ab073f67036bb45d1787d0d31a4
970970
React-graphics: cb8a85648695c60f33a00d732b985f734d1470d8
971-
React-hermes: 299c7f56d32e8953480fd8e7fba2a7968a534b3f
971+
React-hermes: af82687697f03ebb78aadd09dbc027df55fd87f8
972972
React-jsi: d40e13b7f545f9af2af780f153f5321018b5e2f8
973973
React-jsidynamic: 8aa406dfc1eff081f3443e55a28b51d11616a3bf
974-
React-jsiexecutor: 04a945f040cc085d79655359ec29e5f501fb6e01
975-
React-jsinspector: a56861590ddfcb5cb544877ade3e007a32ff9616
974+
React-jsiexecutor: c402e7aeef68fab08a5f82adfea1f6874bf1b89b
975+
React-jsinspector: 9b56a373a6797114e1d89a7dffa98ee98af67a8f
976976
React-logger: 07c9b44040a6f948b8e2033207b23cb623f0b9b4
977977
React-perflogger: b4b9fb2ddd856b78003708ab3cf66ce03e6bc7c4
978978
React-RCTActionSheet: 1b1501ef80928be10702cd0ce09120358094cd82

scripts/cocoapods/jsengine.rb

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,6 @@ def remove_copy_hermes_framework_script_phase(installer, react_native_path)
6060
project.save()
6161
end
6262

63-
def remove_hermesc_build_dir(react_native_path)
64-
%x(rm -rf #{react_native_path}/sdks/hermes-engine/build_host_hermesc)
65-
end
66-
6763
def is_building_hermes_from_source(react_native_version)
6864
is_nightly = react_native_version.start_with?('0.0.0-')
6965
has_tarball = ENV['HERMES_ENGINE_TARBALL_PATH'] != nil

scripts/react_native_pods.rb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,6 @@ def react_native_post_install(installer, react_native_path = "../node_modules/re
209209
add_copy_hermes_framework_script_phase(installer, react_native_path)
210210
else
211211
remove_copy_hermes_framework_script_phase(installer, react_native_path)
212-
remove_hermesc_build_dir(react_native_path)
213212
end
214213

215214
ReactNativePodsUtils.exclude_i386_architecture_while_using_hermes(installer)

sdks/hermes-engine/hermes-engine.podspec

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -104,16 +104,10 @@ Pod::Spec.new do |spec|
104104
ss.header_dir = 'hermes/Public'
105105
end
106106

107-
hermesc_path = ""
107+
hermesc_path = "${PODS_ROOT}/hermes-engine/build_host_hermesc"
108108

109109
if ENV.has_key?('HERMES_OVERRIDE_HERMESC_PATH') && File.exist?(ENV['HERMES_OVERRIDE_HERMESC_PATH']) then
110110
hermesc_path = ENV['HERMES_OVERRIDE_HERMESC_PATH']
111-
else
112-
# Keep hermesc_path synchronized with .gitignore entry.
113-
ENV['REACT_NATIVE_PATH'] = react_native_path
114-
hermesc_path = "${REACT_NATIVE_PATH}/sdks/hermes-engine/build_host_hermesc"
115-
# NOTE: Prepare command is not run if the pod is not downloaded.
116-
spec.prepare_command = ". #{react_native_path}/sdks/hermes-engine/utils/build-hermesc-xcode.sh #{hermesc_path}"
117111
end
118112

119113
spec.user_target_xcconfig = {
@@ -125,12 +119,22 @@ Pod::Spec.new do |spec|
125119
'HERMES_CLI_PATH' => "#{hermesc_path}/bin/hermesc"
126120
}
127121

122+
CMAKE_BINARY = %x(command -v cmake | tr -d '\n')
123+
# NOTE: Script phases are sorted alphabetically inside Xcode project
128124
spec.script_phases = [
129125
{
130-
:name => 'Build Hermes',
126+
:name => '[RN] [1] Build Hermesc',
131127
:script => <<-EOS
132128
. ${PODS_ROOT}/../.xcode.env
133-
export CMAKE_BINARY=${CMAKE_BINARY:-#{%x(command -v cmake | tr -d '\n')}}
129+
export CMAKE_BINARY=${CMAKE_BINARY:-#{CMAKE_BINARY}}
130+
. ${REACT_NATIVE_PATH}/sdks/hermes-engine/utils/build-hermesc-xcode.sh #{hermesc_path}
131+
EOS
132+
},
133+
{
134+
:name => '[RN] [2] Build Hermes',
135+
:script => <<-EOS
136+
. ${PODS_ROOT}/../.xcode.env
137+
export CMAKE_BINARY=${CMAKE_BINARY:-#{CMAKE_BINARY}}
134138
. ${REACT_NATIVE_PATH}/sdks/hermes-engine/utils/build-hermes-xcode.sh #{version} #{hermesc_path}/ImportHermesc.cmake
135139
EOS
136140
}

sdks/hermes-engine/utils/build-hermesc-xcode.sh

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,16 @@ set -x
88

99
hermesc_dir_path="$1"
1010

11-
CMAKE_BINARY=${CMAKE_BINARY:-$(command -v cmake | tr -d '\n')}
11+
# This script is supposed to be executed from Xcode "run script" phase.
12+
# Xcode sets up its build environment based on the build target.
13+
# Here we override relevant envvars to make sure that we build hermesc for macosx,
14+
# even if Xcode build target is iphone, iponesimulator, etc.
15+
MACOSX_DEPLOYMENT_TARGET=$(sw_vers -productVersion)
16+
export MACOSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET
17+
SDKROOT=$(xcode-select -p)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk
18+
export SDKROOT=$SDKROOT
1219

13-
if ! "$CMAKE_BINARY" -S . -B "$hermesc_dir_path"
20+
if ! "$CMAKE_BINARY" -S "${PODS_ROOT}/hermes-engine" -B "$hermesc_dir_path"
1421
then
1522
echo "Failed to configure Hermesc cmake project."
1623
exit 1

0 commit comments

Comments
 (0)