Skip to content

Commit 647e09d

Browse files
cipolleschiTitozzz
authored andcommitted
Add ld_classic flag to Hermes when building for Xcode 15 (#39516)
Summary: Pull Request resolved: #39516 With Xcode15, Apple rewrote the C++ linker. This is a breaking change that does not work with weak symbols. As a workaround, apple is suggesting to add `-ld_classic` to the linker in order to readd support for weak symbols. The flag does not exists for Xcode 14.3 or lower, so we need to add it conditionally. With this change, we introduce a couple of checks in the Hermes build logic: 1. Detect the version of Xcode that is used 2. Add the new flag to `HERMES_EXTRA_LINKER_FLAGS` if Xcode version is 15. [Internal] - Make hermes build properly with Xcode 15 Reviewed By: cortinico, dmytrorykun Differential Revision: D49368675 fbshipit-source-id: 62d8ed81855c426f56ed94b6a2d6da2eb882b355
1 parent 5a671c1 commit 647e09d

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

sdks/hermes-engine/utils/build-apple-framework.sh

+8-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ function build_host_hermesc {
5252

5353
# Utility function to configure an Apple framework
5454
function configure_apple_framework {
55-
local build_cli_tools enable_bitcode enable_debugger cmake_build_type
55+
local build_cli_tools enable_bitcode enable_debugger cmake_build_type xcode_15_flags xcode_major_version
5656

5757
if [[ $1 == iphoneos || $1 == catalyst ]]; then
5858
enable_bitcode="true"
@@ -77,8 +77,15 @@ function configure_apple_framework {
7777
cmake_build_type="MinSizeRel"
7878
fi
7979

80+
xcode_15_flags=""
81+
xcode_major_version=$(xcodebuild -version | grep -oE '[0-9]*' | head -n 1)
82+
if [[ $xcode_major_version -ge 15 ]]; then
83+
xcode_15_flags="LINKER:-ld_classic"
84+
fi
85+
8086
pushd "$HERMES_PATH" > /dev/null || exit 1
8187
cmake -S . -B "build_$1" \
88+
-DHERMES_EXTRA_LINKER_FLAGS="$xcode_15_flags" \
8289
-DHERMES_APPLE_TARGET_PLATFORM:STRING="$1" \
8390
-DCMAKE_OSX_ARCHITECTURES:STRING="$2" \
8491
-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING="$3" \

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

+8
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,21 @@ if [ -z "$deployment_target" ]; then
3333
deployment_target=${MACOSX_DEPLOYMENT_TARGET}
3434
fi
3535

36+
xcode_15_flags=""
37+
xcode_major_version=$(xcodebuild -version | grep -oE '[0-9]*' | head -n 1)
38+
if [[ $xcode_major_version -ge 15 ]]; then
39+
echo "########### Using LINKER:-ld_classic ###########"
40+
xcode_15_flags="LINKER:-ld_classic"
41+
fi
42+
3643
architectures=$( echo "$ARCHS" | tr " " ";" )
3744

3845
echo "Configure Apple framework"
3946

4047
"$CMAKE_BINARY" \
4148
-S "${PODS_ROOT}/hermes-engine" \
4249
-B "${PODS_ROOT}/hermes-engine/build/${PLATFORM_NAME}" \
50+
-DHERMES_EXTRA_LINKER_FLAGS="$xcode_15_flags" \
4351
-DHERMES_APPLE_TARGET_PLATFORM:STRING="$PLATFORM_NAME" \
4452
-DCMAKE_OSX_ARCHITECTURES:STRING="$architectures" \
4553
-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING="$deployment_target" \

0 commit comments

Comments
 (0)