Skip to content

Commit ccaf933

Browse files
committed
* Added minimum version flags for the iOS and tvOS simulators
* iOS Simulator binaries now only build to match the specified iOS architecture - e.g. if you only build arm64, only the x86_64 simulator binary is produced, rather than both x86_64 and i386. * Fixed a problem trying to lipo universal binaries when built binaries only contained a single architecture. * Updated README (a little). * Updated default minimum OS versions Closes #39
1 parent 1ebe6e7 commit ccaf933

File tree

3 files changed

+93
-57
lines changed

3 files changed

+93
-57
lines changed

README.md

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,20 @@ less painful.
1111

1212
To configure the script, define:
1313
```
14-
BOOST_VERSION: Which version of Boost to build (e.g. 1.58.0)
15-
BOOST_VERSION2: Same as BOOST_VERSION, but with _ instead of . (e.g. 1_58_0)
16-
BOOST_LIBS: Which Boost libraries to build
17-
IOS_SDK_VERSION: iOS SDK version (e.g. 9.0)
18-
MIN_IOS_VERSION: Minimum iOS Target Version (e.g. 8.0)
19-
TVOS_SDK_VERSION: tvOS SDK version (e.g. 9.2)
20-
MIN_TVOS_VERSION: Minimum tvOS Target Version (e.g. 9.2)
21-
MACOS_SDK_VERSION: macOS SDK version (e.g. 10.11)
22-
MIN_MACOS_VERSION: Minimum macOS Target Version (e.g. 10.10)
14+
BOOST_VERSION: Which version of Boost to build (e.g. 1.70.0)
15+
BOOST_LIBS: Which Boost libraries to build
16+
IOS_SDK_VERSION: iOS SDK version (e.g. 12.0)
17+
MIN_IOS_VERSION: Minimum iOS Target Version (e.g. 11.0)
18+
TVOS_SDK_VERSION: tvOS SDK version (e.g. 12.0)
19+
MIN_TVOS_VERSION: Minimum tvOS Target Version (e.g. 11.0)
20+
MACOS_SDK_VERSION: macOS SDK version (e.g. 10.14)
21+
MIN_MACOS_VERSION: Minimum macOS Target Version (e.g. 10.12)
2322
```
2423

2524
If a boost tarball (a file named “boost_$BOOST_VERSION2.tar.bz2”) does not
2625
exist in the current directory, this script will attempt to download the
27-
version specified by BOOST_VERSION2. You may also manually place a matching
28-
tarball in the current directory and the script will use that.
26+
version specified. You may also manually place a matching tarball in the
27+
current directory and the script will use that.
2928

3029
usage: `./boost.sh [{-ios,-tvos,-macos} ...] options`
3130

boost.sh

Lines changed: 73 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,18 @@
1313
# less painful.
1414
#
1515
# To configure the script, define:
16-
# BOOST_VERSION: Which version of Boost to build (e.g. 1.61.0)
16+
# BOOST_VERSION: Which version of Boost to build (e.g. 1.69.0)
1717
# BOOST_LIBS: Which Boost libraries to build
18-
# IOS_SDK_VERSION: iOS SDK version (e.g. 10.0)
19-
# MIN_IOS_VERSION: Minimum iOS Target Version (e.g. 10.0)
20-
# TVOS_SDK_VERSION: iOS SDK version (e.g. 10.0)
21-
# MIN_TVOS_VERSION: Minimum iOS Target Version (e.g. 10.0)
22-
# MACOS_SDK_VERSION: macOS SDK version (e.g. 10.11)
23-
# MIN_MACOS_VERSION: Minimum macOS Target Version (e.g. 10.10)
18+
# IOS_SDK_VERSION: iOS SDK version (e.g. 12.0)
19+
# MIN_IOS_VERSION: Minimum iOS Target Version (e.g. 11.0)
20+
# TVOS_SDK_VERSION: iOS SDK version (e.g. 12.0)
21+
# MIN_TVOS_VERSION: Minimum iOS Target Version (e.g. 11.0)
22+
# MACOS_SDK_VERSION: macOS SDK version (e.g. 10.14)
23+
# MIN_MACOS_VERSION: Minimum macOS Target Version (e.g. 10.12)
2424
#
2525
# If a boost tarball (a file named “boost_$BOOST_VERSION2.tar.bz2”) does not
2626
# exist in the current directory, this script will attempt to download the
27-
# version specified by BOOST_VERSION2. You may also manually place a matching
27+
# version specified. You may also manually place a matching
2828
# tarball in the current directory and the script will use that.
2929
#
3030
#===============================================================================
@@ -42,20 +42,21 @@ ALL_BOOST_LIBS_1_69=\
4242
" serialization signals2 system test thread timer type_erasure wave"
4343
BOOTSTRAP_LIBS=""
4444

45-
MIN_IOS_VERSION=10.0
45+
MIN_IOS_VERSION=11.0
4646
IOS_SDK_VERSION=`xcrun --sdk iphoneos --show-sdk-version`
4747

48-
MIN_TVOS_VERSION=10.0
48+
MIN_TVOS_VERSION=11.0
4949
TVOS_SDK_VERSION=`xcrun --sdk appletvos --show-sdk-version`
5050
TVOS_SDK_PATH=`xcrun --sdk appletvos --show-sdk-path`
5151
TVOSSIM_SDK_PATH=`xcrun --sdk appletvsimulator --show-sdk-path`
5252

53-
MIN_MACOS_VERSION=10.10
53+
MIN_MACOS_VERSION=10.12
5454
MACOS_SDK_VERSION=`xcrun --sdk macosx --show-sdk-version`
5555
MACOS_SDK_PATH=`xcrun --sdk macosx --show-sdk-path`
5656

5757
MACOS_ARCHS=("x86_64")
5858
IOS_ARCHS=("armv7 arm64")
59+
IOS_SIM_ARCHS=("i386 x86_64")
5960

6061
# Applied to all platforms
6162
CXX_FLAGS="-std=c++14 -stdlib=libc++"
@@ -89,7 +90,7 @@ The -ios, -tvos, and -macOS options may be specified together. Default
8990
is to build all of them.
9091
9192
Examples:
92-
./boost.sh -ios -tvos --boost-version 1.63.0
93+
./boost.sh -ios -tvos --boost-version 1.68.0
9394
./boost.sh -macos --no-framework
9495
./boost.sh --clean
9596
@@ -174,14 +175,15 @@ OPTIONS:
174175
Defaults to $IOS_SDK_VERSION
175176
176177
--min-ios-version [num]
177-
Specify the minimum iOS version to target. Since iOS 11 is 64-bit only,
178+
Specify the minimum iOS version to target. Since iOS 11+ are 64-bit only,
178179
if the minimum iOS version is set to iOS 11.0 or later, iOS archs is
179-
automatically set to 'arm64', unless '--ios-archs' is also specified.
180+
automatically set to 'arm64' and iOS Simulator archs is set to "x86_64",
181+
unless '--ios-archs' is also specified.
180182
Defaults to $MIN_IOS_VERSION
181183
182184
--ios-archs "(archs, ...)"
183-
Specify the iOS architectures to build for. Space-separate list.
184-
Defaults to ${IOS_ARCHS[*]}
185+
Specify the iOS architectures to build for. Also updates the iOS Simulator
186+
architectures to match. Space-separate list.
185187
186188
--tvos-sdk [num]
187189
Specify the tvOS SDK version to build with.
@@ -447,8 +449,19 @@ parseArgs()
447449

448450
if [[ -n $CUSTOM_IOS_ARCHS ]]; then
449451
IOS_ARCHS=($CUSTOM_IOS_ARCHS)
452+
IOS_SIM_ARCHS=""
453+
# As of right now this matches the currently available ARM architectures
454+
# Add 32-bit simulator for 32-bit arm
455+
if [[ "${IOS_ARCHS[@]}" =~ armv ]]; then
456+
IOS_SIM_ARCHS="i386 $IOS_SIM_ARCHS"
457+
fi
458+
# Add 64-bit simulator for 64-bit arm
459+
if [[ "${IOS_ARCHS[@]}" =~ arm64 ]]; then
460+
IOS_SIM_ARCHS="x86_64 $IOS_SIM_ARCHS"
461+
fi
450462
elif (( $(echo "$MIN_IOS_VERSION >= 11.0" | bc -l) )); then
451463
IOS_ARCHS=("arm64")
464+
IOS_SIM_ARCHS=("x86_64")
452465
fi
453466
}
454467

@@ -542,7 +555,7 @@ using darwin : ${IOS_SDK_VERSION}~iphone
542555
: <architecture>arm <target-os>iphone
543556
;
544557
using darwin : ${IOS_SDK_VERSION}~iphonesim
545-
: $COMPILER -arch i386 -arch x86_64 $EXTRA_IOS_FLAGS
558+
: $COMPILER $IOS_SIM_ARCH_FLAGS $EXTRA_IOS_SIM_FLAGS
546559
: <striper> <root>$XCODE_ROOT/Platforms/iPhoneSimulator.platform/Developer
547560
: <architecture>x86 <target-os>iphone
548561
;
@@ -558,7 +571,7 @@ using darwin : ${TVOS_SDK_VERSION}~appletv
558571
: <architecture>arm <target-os>iphone
559572
;
560573
using darwin : ${TVOS_SDK_VERSION}~appletvsim
561-
: $COMPILER -arch x86_64 $EXTRA_TVOS_FLAGS -isysroot $TVOSSIM_SDK_PATH -I $TVOSSIM_SDK_PATH
574+
: $COMPILER -arch x86_64 $EXTRA_TVOS_SIM_FLAGS -isysroot $TVOSSIM_SDK_PATH -I $TVOSSIM_SDK_PATH
562575
: <striper> <root>$XCODE_ROOT/Platforms/AppleTVSimulator.platform/Developer
563576
: <architecture>x86 <target-os>iphone
564577
;
@@ -644,7 +657,8 @@ buildBoost_iOS()
644657

645658
echo Building Boost for iPhoneSimulator
646659
./b2 $THREADS --build-dir=iphonesim-build --stagedir=iphonesim-build/stage \
647-
toolset=darwin-${IOS_SDK_VERSION}~iphonesim cxxflags="${CXX_FLAGS}" architecture=x86 linkflags="-stdlib=libc++" \
660+
toolset=darwin-${IOS_SDK_VERSION}~iphonesim \
661+
cxxflags="${CXX_FLAGS} ${IOS_SIM_ARCH_FLAGS}" architecture=x86 linkflags="-stdlib=libc++" \
648662
target-os=iphone macosx-version=iphonesim-${IOS_SDK_VERSION} \
649663
link=static variant=${BUILD_VARIANT} stage >> "${IOS_OUTPUT_DIR}/ios-build.log" 2>&1
650664
if [ $? != 0 ]; then echo "Error staging iPhoneSimulator. Check log."; exit 1; fi
@@ -739,8 +753,9 @@ scrunchAllLibsTogetherInOneLibPerPlatform()
739753
done
740754

741755
# iOS Simulator
742-
mkdir -p "$IOS_BUILD_DIR/i386/obj"
743-
mkdir -p "$IOS_BUILD_DIR/x86_64/obj"
756+
for ARCH in ${IOS_SIM_ARCHS[@]}; do
757+
mkdir -p "$IOS_BUILD_DIR/$ARCH/obj"
758+
done
744759
fi
745760

746761
if [[ -n $BUILD_TVOS ]]; then
@@ -771,14 +786,24 @@ scrunchAllLibsTogetherInOneLibPerPlatform()
771786

772787
if [[ -n $BUILD_IOS ]]; then
773788
for ARCH in ${IOS_ARCHS[@]}; do
774-
$IOS_ARM_DEV_CMD lipo "iphone-build/stage/lib/libboost_$NAME.a" \
775-
-thin $ARCH -o "$IOS_BUILD_DIR/$ARCH/libboost_$NAME.a"
789+
if [[ ${#IOS_ARCHS[@]} > 1 ]]; then
790+
$IOS_ARM_DEV_CMD lipo "iphone-build/stage/lib/libboost_$NAME.a" \
791+
-thin $ARCH -o "$IOS_BUILD_DIR/$ARCH/libboost_$NAME.a"
792+
else
793+
cp "iphone-build/stage/lib/libboost_$NAME.a" \
794+
"$IOS_BUILD_DIR/$ARCH/libboost_$NAME.a"
795+
fi
776796
done
777797

778-
$IOS_SIM_DEV_CMD lipo "iphonesim-build/stage/lib/libboost_$NAME.a" \
779-
-thin i386 -o "$IOS_BUILD_DIR/i386/libboost_$NAME.a"
780-
$IOS_SIM_DEV_CMD lipo "iphonesim-build/stage/lib/libboost_$NAME.a" \
781-
-thin x86_64 -o "$IOS_BUILD_DIR/x86_64/libboost_$NAME.a"
798+
for ARCH in ${IOS_SIM_ARCHS[@]}; do
799+
if [[ ${#IOS_SIM_ARCHS[@]} > 1 ]]; then
800+
$IOS_SIM_DEV_CMD lipo "iphonesim-build/stage/lib/libboost_$NAME.a" \
801+
-thin $ARCH -o "$IOS_BUILD_DIR/$ARCH/libboost_$NAME.a"
802+
else
803+
cp "iphonesim-build/stage/lib/libboost_$NAME.a" \
804+
"$IOS_BUILD_DIR/$ARCH/libboost_$NAME.a"
805+
fi
806+
done
782807
fi
783808

784809
if [[ -n $BUILD_TVOS ]]; then
@@ -814,8 +839,9 @@ scrunchAllLibsTogetherInOneLibPerPlatform()
814839
for ARCH in ${IOS_ARCHS[@]}; do
815840
unpackArchive "$IOS_BUILD_DIR/$ARCH/obj" $NAME
816841
done
817-
unpackArchive "$IOS_BUILD_DIR/i386/obj" $NAME
818-
unpackArchive "$IOS_BUILD_DIR/x86_64/obj" $NAME
842+
for ARCH in ${IOS_SIM_ARCHS[@]}; do
843+
unpackArchive "$IOS_BUILD_DIR/$ARCH/obj" $NAME
844+
done
819845
fi
820846

821847
if [[ -n $BUILD_TVOS ]]; then
@@ -862,10 +888,10 @@ scrunchAllLibsTogetherInOneLibPerPlatform()
862888
(cd "$IOS_BUILD_DIR/$ARCH"; $IOS_ARM_DEV_CMD ar crus libboost.a obj/$NAME/*.o; )
863889
done
864890

865-
echo ...ios-i386
866-
(cd "$IOS_BUILD_DIR/i386"; $IOS_SIM_DEV_CMD ar crus libboost.a obj/$NAME/*.o; )
867-
echo ...ios-x86_64
868-
(cd "$IOS_BUILD_DIR/x86_64"; $IOS_SIM_DEV_CMD ar crus libboost.a obj/$NAME/*.o; )
891+
for ARCH in ${IOS_SIM_ARCHS[@]}; do
892+
echo ...ios-sim-$ARCH
893+
(cd "$IOS_BUILD_DIR/$ARCH"; $IOS_SIM_ARM_DEV_CMD ar crus libboost.a obj/$NAME/*.o; )
894+
done
869895
fi
870896

871897
if [[ -n $BUILD_TVOS ]]; then
@@ -900,13 +926,9 @@ buildUniversal()
900926
for ARCH in ${IOS_ARCHS[@]}; do
901927
ARCH_FILES+=" $ARCH/libboost_$NAME.a"
902928
done
903-
# Ideally IOS_ARCHS contains i386 and x86_64 and simulator build steps are not treated out of band
904-
if [ -f "i386/libboost_$NAME.a" ]; then
905-
ARCH_FILES+=" i386/libboost_$NAME.a"
906-
fi
907-
if [ -f "x86_64/libboost_$NAME.a" ]; then
908-
ARCH_FILES+=" x86_64/libboost_$NAME.a"
909-
fi
929+
for ARCH in ${IOS_SIM_ARCHS[@]}; do
930+
ARCH_FILES+=" $ARCH/libboost_$NAME.a"
931+
done
910932
if [[ ${ARCH_FILES[@]} ]]; then
911933
echo "... $NAME"
912934
$IOS_ARM_DEV_CMD lipo -create $ARCH_FILES -o "universal/libboost_$NAME.a" || abort "Lipo $1 failed"
@@ -945,12 +967,9 @@ buildUniversal()
945967
fi
946968

947969
ARCH_FILES=""
948-
if [ -f "i386/libboost_$NAME.a" ]; then
949-
ARCH_FILES+=" i386/libboost_$NAME.a"
950-
fi
951-
if [ -f "x86_64/libboost_$NAME.a" ]; then
952-
ARCH_FILES+=" x86_64/libboost_$NAME.a"
953-
fi
970+
for ARCH in ${MACOS_ARCHS[@]}; do
971+
ARCH_FILES+=" $ARCH/libboost_$NAME.a"
972+
done
954973
if [[ ${ARCH_FILES[@]} ]]; then
955974
echo "... $NAME"
956975
$TVOS_ARM_DEV_CMD lipo -create $ARCH_FILES -o "universal/libboost_$NAME.a" || abort "Lipo $1 failed"
@@ -1067,7 +1086,9 @@ EXTRA_FLAGS="-fembed-bitcode -Wno-unused-local-typedef -Wno-nullability-complete
10671086
EXTRA_ARM_FLAGS="-DBOOST_AC_USE_PTHREADS -DBOOST_SP_USE_PTHREADS -g -DNDEBUG"
10681087

10691088
EXTRA_IOS_FLAGS="$EXTRA_FLAGS $EXTRA_ARM_FLAGS -mios-version-min=$MIN_IOS_VERSION"
1089+
EXTRA_IOS_SIM_FLAGS="$EXTRA_FLAGS $EXTRA_ARM_FLAGS -mios-simulator-version-min=$MIN_IOS_VERSION"
10701090
EXTRA_TVOS_FLAGS="$EXTRA_FLAGS $EXTRA_ARM_FLAGS -mtvos-version-min=$MIN_TVOS_VERSION"
1091+
EXTRA_TVOS_SIM_FLAGS="$EXTRA_FLAGS $EXTRA_ARM_FLAGS -mtvos-simulator-version-min=$MIN_TVOS_VERSION"
10711092
EXTRA_MACOS_FLAGS="$EXTRA_FLAGS -mmacosx-version-min=$MIN_MACOS_VERSION"
10721093
EXTRA_MACOS_SDK_FLAGS="-isysroot ${MACOS_SDK_PATH} -mmacosx-version-min=${MIN_MACOS_VERSION}"
10731094

@@ -1096,6 +1117,11 @@ for ARCH in ${IOS_ARCHS[@]}; do
10961117
IOS_ARCH_FLAGS="$IOS_ARCH_FLAGS -arch $ARCH"
10971118
done
10981119

1120+
IOS_SIM_ARCH_FLAGS=""
1121+
for ARCH in ${IOS_SIM_ARCHS[@]}; do
1122+
IOS_SIM_ARCH_FLAGS="$IOS_SIM_ARCH_FLAGS -arch $ARCH"
1123+
done
1124+
10991125
format="%-20s %s\n"
11001126
printf "$format" "BUILD_IOS:" $( [[ -n $BUILD_IOS ]] && echo "YES" || echo "NO")
11011127
printf "$format" "BUILD_TVOS:" $( [[ -n $BUILD_TVOS ]] && echo "YES" || echo "NO")
@@ -1112,6 +1138,7 @@ printf "$format" "MACOS_SDK_PATH:" "$MACOS_SDK_PATH"
11121138
printf "$format" "MIN_MACOS_VERSION:" "$MIN_MACOS_VERSION"
11131139
printf "$format" "MACOS_ARCHS:" "${MACOS_ARCHS[*]}"
11141140
printf "$format" "IOS_ARCHS:" "${IOS_ARCHS[*]}"
1141+
printf "$format" "IOS_SIM_ARCHS" "${IOS_SIM_ARCHS[*]}"
11151142
printf "$format" "BOOST_LIBS:" "$BOOST_LIBS"
11161143
printf "$format" "BOOST_SRC:" "$BOOST_SRC"
11171144
printf "$format" "IOS_BUILD_DIR:" "$IOS_BUILD_DIR"

changelog

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
-- 2019-07-01 --
2+
* Added minimum version flags for the iOS and tvOS simulators
3+
* iOS Simulator binaries now only build to match the specified
4+
iOS architecture - e.g. if you only build arm64, only the x86_64
5+
simulator binary is produced, rather than both x86_64 and i386.
6+
* Fixed a problem trying to lipo universal binaries when built
7+
binaries only contained a single architecture.
8+
* Updated README (a little).
9+
* Updated default minimum OS versions
10+
111
-- 2018-12-19 --
212
* Added ability to compile debug variant (pr#35)
313

0 commit comments

Comments
 (0)