Skip to content

Commit 9167e9a

Browse files
Merge pull request #62 from paynerc/add_arm64_simulator_support
Add iOS and tvOS simulator support on arm64 based macs
2 parents 48ff173 + a8f3ba8 commit 9167e9a

File tree

2 files changed

+122
-41
lines changed

2 files changed

+122
-41
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
## Project-specific
22
src/
33
build/
4+
dist/
45
*.tar.bz2
56

67
# Created by https://www.toptal.com/developers/gitignore/api/xcode,macos

boost.sh

Lines changed: 121 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ MIN_MAC_CATALYST_VERSION=13.0
5757
MACOS_ARCHS=("i386" "x86_64")
5858
MACOS_SILICON_ARCHS=("arm64")
5959
IOS_ARCHS=("armv7" "arm64")
60-
IOS_SIM_ARCHS=("i386" "x86_64")
60+
IOS_SIM_ARCHS=("i386" "x86_64" "arm64")
61+
TVOS_ARCHS=("arm64")
62+
TVOS_SIM_ARCHS=("x86_64" "arm64")
6163
MAC_CATALYST_ARCHS=("x86_64")
6264

6365
# Applied to all platforms
@@ -213,8 +215,8 @@ OPTIONS:
213215
--min-ios-version [num]
214216
Specify the minimum iOS version to target. Since iOS 11+ are 64-bit only,
215217
if the minimum iOS version is set to iOS 11.0 or later, iOS archs is
216-
automatically set to 'arm64' and iOS Simulator archs is set to "x86_64",
217-
unless '--ios-archs' is also specified.
218+
automatically set to 'arm64' and iOS Simulator archs is set to ("x86_64"
219+
"arm64") unless '--ios-archs' is also specified.
218220
Defaults to $MIN_IOS_VERSION
219221
220222
--ios-archs "(archs, ...)"
@@ -587,16 +589,16 @@ parseArgs()
587589
if [[ "${IOS_ARCHS[*]}" =~ armv ]]; then
588590
IOS_SIM_ARCHS+=("i386")
589591
fi
590-
# Add 64-bit simulator for 64-bit arm
592+
# Add x86-64 and arm64 mac simulator for 64-bit arm iOS
591593
if [[ "${IOS_ARCHS[*]}" =~ arm64 ]]; then
592-
IOS_SIM_ARCHS+=("x86_64")
594+
IOS_SIM_ARCHS+=("x86_64" "arm64")
593595
fi
594596
else
595597
read -ra MIN_IOS_PARTS <<< "${MIN_IOS_VERSION//./ }"
596598
if [[ ${MIN_IOS_PARTS[0]} -ge 11 ]]; then
597599
# iOS 11 dropped support for 32bit devices
598600
IOS_ARCHS=("arm64")
599-
IOS_SIM_ARCHS=("x86_64")
601+
IOS_SIM_ARCHS=("x86_64" "arm64")
600602
fi
601603
fi
602604
}
@@ -745,7 +747,7 @@ using darwin : $COMPILER_VERSION~appletv
745747
<target-os>iphone
746748
<cxxflags>"$CXX_FLAGS"
747749
<linkflags>"$LD_FLAGS"
748-
<compileflags>"$OTHER_FLAGS -arch arm64 $EXTRA_TVOS_FLAGS -isysroot $TVOS_SDK_PATH"
750+
<compileflags>"$OTHER_FLAGS ${TVOS_ARCH_FLAGS[*]} $EXTRA_TVOS_FLAGS -isysroot $TVOS_SDK_PATH"
749751
<threading>multi
750752
;
751753
using darwin : $COMPILER_VERSION~appletvsim
@@ -754,7 +756,7 @@ using darwin : $COMPILER_VERSION~appletvsim
754756
<target-os>iphone
755757
<cxxflags>"$CXX_FLAGS"
756758
<linkflags>"$LD_FLAGS"
757-
<compileflags>"$OTHER_FLAGS -arch x86_64 $EXTRA_TVOS_SIM_FLAGS -isysroot $TVOSSIM_SDK_PATH"
759+
<compileflags>"$OTHER_FLAGS ${TVOS_SIM_ARCH_FLAGS[*]} $EXTRA_TVOS_SIM_FLAGS -isysroot $TVOSSIM_SDK_PATH"
758760
<threading>multi
759761
;
760762
using darwin : $COMPILER_VERSION~macos
@@ -1039,21 +1041,25 @@ scrunchAllLibsTogetherInOneLibPerPlatform()
10391041
if [[ -n $BUILD_IOS ]]; then
10401042
# iOS Device
10411043
for ARCH in "${IOS_ARCHS[@]}"; do
1042-
mkdir -p "$IOS_BUILD_DIR/$ARCH/obj"
1044+
mkdir -p "$IOS_BUILD_DIR/iphoneos/$ARCH/obj"
10431045
done
10441046

10451047
# iOS Simulator
10461048
for ARCH in "${IOS_SIM_ARCHS[@]}"; do
1047-
mkdir -p "$IOS_BUILD_DIR/$ARCH/obj"
1049+
mkdir -p "$IOS_BUILD_DIR/iphonesimulator/$ARCH/obj"
10481050
done
10491051
fi
10501052

10511053
if [[ -n $BUILD_TVOS ]]; then
10521054
# tvOS Device
1053-
mkdir -p "$TVOS_BUILD_DIR/arm64/obj"
1055+
for ARCH in "${TVOS_ARCHS[@]}"; do
1056+
mkdir -p "$TVOS_BUILD_DIR/appletvos/$ARCH/obj"
1057+
done
10541058

10551059
# tvOS Simulator
1056-
mkdir -p "$TVOS_BUILD_DIR/x86_64/obj"
1060+
for ARCH in "${TVOS_SIM_ARCHS[@]}"; do
1061+
mkdir -p "$TVOS_BUILD_DIR/appletvsimulator/$ARCH/obj"
1062+
done
10571063
fi
10581064

10591065
if [[ -n $BUILD_MACOS ]]; then
@@ -1091,30 +1097,44 @@ scrunchAllLibsTogetherInOneLibPerPlatform()
10911097
if [[ "${#IOS_ARCHS[@]}" -gt 1 ]]; then
10921098
for ARCH in "${IOS_ARCHS[@]}"; do
10931099
$IOS_DEV_CMD lipo "iphone-build/stage/lib/libboost_$NAME.a" \
1094-
-thin "$ARCH" -o "$IOS_BUILD_DIR/$ARCH/libboost_$NAME.a"
1100+
-thin "$ARCH" -o "$IOS_BUILD_DIR/iphoneos/$ARCH/libboost_$NAME.a"
10951101
done
10961102
else
10971103
cp "iphone-build/stage/lib/libboost_$NAME.a" \
1098-
"$IOS_BUILD_DIR/${IOS_ARCHS[0]}/libboost_$NAME.a"
1104+
"$IOS_BUILD_DIR/iphoneos/${IOS_ARCHS[0]}/libboost_$NAME.a"
10991105
fi
11001106

11011107
if [[ "${#IOS_SIM_ARCHS[@]}" -gt 1 ]]; then
11021108
for ARCH in "${IOS_SIM_ARCHS[@]}"; do
11031109
$IOS_SIM_DEV_CMD lipo "iphonesim-build/stage/lib/libboost_$NAME.a" \
1104-
-thin "$ARCH" -o "$IOS_BUILD_DIR/$ARCH/libboost_$NAME.a"
1110+
-thin "$ARCH" -o "$IOS_BUILD_DIR/iphonesimulator/$ARCH/libboost_$NAME.a"
11051111
done
11061112
else
11071113
cp "iphonesim-build/stage/lib/libboost_$NAME.a" \
1108-
"$IOS_BUILD_DIR/${IOS_SIM_ARCHS[0]}/libboost_$NAME.a"
1114+
"$IOS_BUILD_DIR/iphonesimulator/${IOS_SIM_ARCHS[0]}/libboost_$NAME.a"
11091115
fi
11101116
fi
11111117

11121118
if [[ -n $BUILD_TVOS ]]; then
1113-
cp "appletv-build/stage/lib/libboost_$NAME.a" \
1114-
"$TVOS_BUILD_DIR/arm64/libboost_$NAME.a"
1115-
1116-
cp "appletvsim-build/stage/lib/libboost_$NAME.a" \
1117-
"$TVOS_BUILD_DIR/x86_64/libboost_$NAME.a"
1119+
if [[ "${#TVOS_ARCHS[@]}" -gt 1 ]]; then
1120+
for ARCH in "${TVOS_ARCHS[@]}"; do
1121+
$TVOS_DEV_CMD lipo "appletv-build/stage/lib/libboost_$NAME.a" \
1122+
-thin "$ARCH" -o "$TVOS_BUILD_DIR/appletvos/$ARCH/libboost_$NAME.a"
1123+
done
1124+
else
1125+
cp "appletv-build/stage/lib/libboost_$NAME.a" \
1126+
"$TVOS_BUILD_DIR/appletvos/${TVOS_ARCHS[0]}/libboost_$NAME.a"
1127+
fi
1128+
1129+
if [[ "${#TVOS_SIM_ARCHS[@]}" -gt 1 ]]; then
1130+
for ARCH in "${TVOS_SIM_ARCHS[@]}"; do
1131+
$TVOS_SIM_DEV_CMD lipo "appletvsim-build/stage/lib/libboost_$NAME.a" \
1132+
-thin "$ARCH" -o "$TVOS_BUILD_DIR/appletvsimulator/$ARCH/libboost_$NAME.a"
1133+
done
1134+
else
1135+
cp "appletvsim-build/stage/lib/libboost_$NAME.a" \
1136+
"$TVOS_BUILD_DIR/appletvsimulator/${TVOS_SIM_ARCHS[0]}/libboost_$NAME.a"
1137+
fi
11181138
fi
11191139

11201140
if [[ -n $BUILD_MACOS ]]; then
@@ -1164,16 +1184,20 @@ scrunchAllLibsTogetherInOneLibPerPlatform()
11641184
echo "Decomposing libboost_${NAME}.a"
11651185
if [[ -n $BUILD_IOS ]]; then
11661186
for ARCH in "${IOS_ARCHS[@]}"; do
1167-
unpackArchive "$IOS_BUILD_DIR/$ARCH/obj" $NAME
1187+
unpackArchive "$IOS_BUILD_DIR/iphoneos/$ARCH/obj" $NAME
11681188
done
11691189
for ARCH in "${IOS_SIM_ARCHS[@]}"; do
1170-
unpackArchive "$IOS_BUILD_DIR/$ARCH/obj" $NAME
1190+
unpackArchive "$IOS_BUILD_DIR/iphonesimulator/$ARCH/obj" $NAME
11711191
done
11721192
fi
11731193

11741194
if [[ -n $BUILD_TVOS ]]; then
1175-
unpackArchive "$TVOS_BUILD_DIR/arm64/obj" $NAME
1176-
unpackArchive "$TVOS_BUILD_DIR/x86_64/obj" $NAME
1195+
for ARCH in "${TVOS_ARCHS[@]}"; do
1196+
unpackArchive "$TVOS_BUILD_DIR/appletvos/$ARCH/obj" $NAME
1197+
done
1198+
for ARCH in "${TVOS_SIM_ARCHS[@]}"; do
1199+
unpackArchive "$TVOS_BUILD_DIR/appletvsimulator/$ARCH/obj" $NAME
1200+
done
11771201
fi
11781202

11791203
if [[ -n $BUILD_MACOS ]]; then
@@ -1198,11 +1222,23 @@ scrunchAllLibsTogetherInOneLibPerPlatform()
11981222
echo "Linking each architecture into an uberlib ($ALL_LIBS => libboost.a )"
11991223
if [[ -n $BUILD_IOS ]]; then
12001224
for ARCH in "${IOS_ARCHS[@]}"; do
1201-
rm "$IOS_BUILD_DIR/$ARCH/libboost.a"
1225+
rm "$IOS_BUILD_DIR/iphoneos/$ARCH/libboost.a"
1226+
done
1227+
rm "$IOS_BUILD_DIR/iphoneos/libboost.a"
1228+
for ARCH in "${IOS_SIM_ARCHS[@]}"; do
1229+
rm "$IOS_BUILD_DIR/iphonesimulator/$ARCH/libboost.a"
12021230
done
1231+
rm "$IOS_BUILD_DIR/iphonesimulator/libboost.a"
12031232
fi
12041233
if [[ -n $BUILD_TVOS ]]; then
1205-
rm "$TVOS_BUILD_DIR"/*/libboost.a
1234+
for ARCH in "${TVOS_ARCHS[@]}"; do
1235+
rm "$TVOS_BUILD_DIR/appletvos/$ARCH/libboost.a"
1236+
done
1237+
rm "$TVOS_BUILD_DIR/appletvos/libboost.a"
1238+
for ARCH in "${TVOS_SIM_ARCHS[@]}"; do
1239+
rm "$TVOS_BUILD_DIR/appletvsimulator/$ARCH/libboost.a"
1240+
done
1241+
rm "$TVOS_BUILD_DIR/appletvsimulator/libboost.a"
12061242
fi
12071243
if [[ -n $BUILD_MACOS ]]; then
12081244
for ARCH in "${MACOS_ARCHS[@]}"; do
@@ -1230,20 +1266,25 @@ scrunchAllLibsTogetherInOneLibPerPlatform()
12301266
if [[ -n $BUILD_IOS ]]; then
12311267
for ARCH in "${IOS_ARCHS[@]}"; do
12321268
echo "...ios-$ARCH"
1233-
(cd_or_abort "$IOS_BUILD_DIR/$ARCH"; $IOS_DEV_CMD ar crus libboost.a "obj/$NAME/"*.o; )
1269+
(cd_or_abort "$IOS_BUILD_DIR/iphoneos/$ARCH"; $IOS_DEV_CMD ar crus libboost.a "obj/$NAME/"*.o; )
12341270
done
12351271

12361272
for ARCH in "${IOS_SIM_ARCHS[@]}"; do
12371273
echo "...ios-sim-$ARCH"
1238-
(cd_or_abort "$IOS_BUILD_DIR/$ARCH"; $IOS_SIM_ARM_DEV_CMD ar crus libboost.a "obj/$NAME/"*.o; )
1274+
(cd_or_abort "$IOS_BUILD_DIR/iphonesimulator/$ARCH"; $IOS_SIM_DEV_CMD ar crus libboost.a "obj/$NAME/"*.o; )
12391275
done
12401276
fi
12411277

12421278
if [[ -n $BUILD_TVOS ]]; then
1243-
echo "...tvOS-arm64"
1244-
(cd_or_abort "$TVOS_BUILD_DIR/arm64"; $TVOS_DEV_CMD ar crus libboost.a "obj/$NAME/"*.o; )
1245-
echo "...tvOS-x86_64"
1246-
(cd_or_abort "$TVOS_BUILD_DIR/x86_64"; $TVOS_SIM_DEV_CMD ar crus libboost.a "obj/$NAME/"*.o; )
1279+
for ARCH in "${TVOS_ARCHS[@]}"; do
1280+
echo "...tvOS-$ARCH"
1281+
(cd_or_abort "$TVOS_BUILD_DIR/appletvos/$ARCH"; $TVOS_DEV_CMD ar crus libboost.a "obj/$NAME/"*.o; )
1282+
done
1283+
1284+
for ARCH in "${TVOS_SIM_ARCHS[@]}"; do
1285+
echo "...tvOS-sim-$ARCH"
1286+
(cd_or_abort "$TVOS_BUILD_DIR/appletvsimulator/$ARCH"; $TVOS_SIM_DEV_CMD ar crus libboost.a "obj/$NAME/"*.o; )
1287+
done
12471288
fi
12481289

12491290
if [[ -n $BUILD_MACOS ]]; then
@@ -1282,10 +1323,10 @@ buildUniversal()
12821323

12831324
ARCH_FILES=()
12841325
for ARCH in "${IOS_ARCHS[@]}"; do
1285-
ARCH_FILES+=("$ARCH/libboost_$NAME.a")
1326+
ARCH_FILES+=("iphoneos/$ARCH/libboost_$NAME.a")
12861327
done
12871328
for ARCH in "${IOS_SIM_ARCHS[@]}"; do
1288-
ARCH_FILES+=("$ARCH/libboost_$NAME.a")
1329+
ARCH_FILES+=("iphonesimulator/$ARCH/libboost_$NAME.a")
12891330
done
12901331
if [[ "${#ARCH_FILES[@]}" -gt 0 ]]; then
12911332
echo "... $NAME"
@@ -1303,12 +1344,12 @@ buildUniversal()
13031344
fi
13041345

13051346
ARCH_FILES=()
1306-
if [ -f "arm64/libboost_$NAME.a" ]; then
1307-
ARCH_FILES+=("arm64/libboost_$NAME.a")
1308-
fi
1309-
if [ -f "x86_64/libboost_$NAME.a" ]; then
1310-
ARCH_FILES+=("x86_64/libboost_$NAME.a")
1311-
fi
1347+
for ARCH in "${TVOS_ARCHS[@]}"; do
1348+
ARCH_FILES+=("appletvos/$ARCH/libboost_$NAME.a")
1349+
done
1350+
for ARCH in "${TVOS_SIM_ARCHS[@]}"; do
1351+
ARCH_FILES+=("appletvsimulator/$ARCH/libboost_$NAME.a")
1352+
done
13121353
if [[ "${#ARCH_FILES[@]}" -gt 0 ]]; then
13131354
echo "... $NAME"
13141355
$TVOS_DEV_CMD lipo -create "${ARCH_FILES[@]}" -o "universal/libboost_$NAME.a" || abort "Lipo $NAME failed"
@@ -1398,6 +1439,20 @@ buildXCFramework()
13981439
# archs / plaforms.
13991440
HEADERS_PATH=""
14001441
if [[ -n $BUILD_IOS ]]; then
1442+
echo "Re-lipo iOS Device libs"
1443+
ARCH_FILES=()
1444+
for ARCH in "${IOS_ARCHS[@]}"; do
1445+
ARCH_FILES+=("$IOS_BUILD_DIR/iphoneos/$ARCH/libboost.a")
1446+
done
1447+
$IOS_DEV_CMD lipo -create "${ARCH_FILES[@]}" -o "$IOS_BUILD_DIR/iphoneos/libboost.a" || abort "iOS Device Lipo failed"
1448+
1449+
echo "Re-lipo iOS Simulator libs"
1450+
ARCH_FILES=()
1451+
for ARCH in "${IOS_SIM_ARCHS[@]}"; do
1452+
ARCH_FILES+=("$IOS_BUILD_DIR/iphonesimulator/$ARCH/libboost.a")
1453+
done
1454+
$IOS_DEV_CMD lipo -create "${ARCH_FILES[@]}" -o "$IOS_BUILD_DIR/iphonesimulator/libboost.a" || abort "iOS Simulator Lipo failed"
1455+
14011456
for LIBPATH in "$IOS_OUTPUT_DIR"/build/*/libboost.a; do
14021457
LIB_ARGS+=('-library' "$LIBPATH")
14031458
SLICES_COUNT=$((SLICES_COUNT + 1))
@@ -1409,6 +1464,20 @@ buildXCFramework()
14091464
fi
14101465
fi
14111466
if [[ -n $BUILD_TVOS ]]; then
1467+
echo "Re-lipo tvOS Device libs"
1468+
ARCH_FILES=()
1469+
for ARCH in "${TVOS_ARCHS[@]}"; do
1470+
ARCH_FILES+=("$TVOS_BUILD_DIR/appletvos/$ARCH/libboost.a")
1471+
done
1472+
$TVOS_DEV_CMD lipo -create "${ARCH_FILES[@]}" -o "$TVOS_BUILD_DIR/appletvos/libboost.a" || abort "tvOS Device Lipo failed"
1473+
1474+
echo "Re-lipo tvOS Simulator libs"
1475+
ARCH_FILES=()
1476+
for ARCH in "${TVOS_SIM_ARCHS[@]}"; do
1477+
ARCH_FILES+=("$TVOS_BUILD_DIR/appletvsimulator/$ARCH/libboost.a")
1478+
done
1479+
$TVOS_DEV_CMD lipo -create "${ARCH_FILES[@]}" -o "$TVOS_BUILD_DIR/appletvsimulator/libboost.a" || abort "tvOS Simulator Lipo failed"
1480+
14121481
for LIBPATH in "$TVOS_OUTPUT_DIR"/build/*/libboost.a; do
14131482
LIB_ARGS+=('-library' "$LIBPATH")
14141483
SLICES_COUNT=$((SLICES_COUNT + 1))
@@ -1563,6 +1632,16 @@ for ARCH in "${IOS_SIM_ARCHS[@]}"; do
15631632
IOS_SIM_ARCH_FLAGS+=("-arch $ARCH")
15641633
done
15651634

1635+
TVOS_ARCH_FLAGS=()
1636+
for ARCH in "${TVOS_ARCHS[@]}"; do
1637+
TVOS_ARCH_FLAGS+=("-arch $ARCH")
1638+
done
1639+
1640+
TVOS_SIM_ARCH_FLAGS=()
1641+
for ARCH in "${TVOS_SIM_ARCHS[@]}"; do
1642+
TVOS_SIM_ARCH_FLAGS+=("-arch $ARCH")
1643+
done
1644+
15661645
printVar()
15671646
{
15681647
VAR_NAME="$1"
@@ -1620,6 +1699,7 @@ if [[ -n "$PURGE" ]]; then
16201699
rm -r boost_*.tar.bz2
16211700
rm -r build
16221701
rm -r src
1702+
rm -r dist
16231703
echo "Done"
16241704
exit 0
16251705
fi

0 commit comments

Comments
 (0)